88064b | 2011-12-20 | Henrik Grubbström (Grubba) | |
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | DOCSTART() @class PIKE_NAME
*!
*! Implementation of the PIKE_NAME hash algorithm.
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | *!
DOCEND()
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | PIKECLASS PIKE_NAME
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | {
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | DOCSTART() @decl inherit Hash
DOCEND()
|
895c72 | 2014-03-29 | Henrik Grubbström (Grubba) | | INHERIT Nettle_Hash;
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | |
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | INIT
{
|
895c72 | 2014-03-29 | Henrik Grubbström (Grubba) | | struct Nettle_Hash_struct *hash;
ASSIGN_CURRENT_STORAGE(hash, struct Nettle_Hash_struct, 1,
Nettle_Hash_program);
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | |
werror(cmod_STRFY_EVAL(PIKE_NAME) "->INIT\n");
|
69e263 | 2013-10-20 | Henrik Grubbström (Grubba) | | hash->meta = &cmod_CONCAT_EVAL(nettle_, NETTLE_NAME);
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | }
|
5a1e2e | 2017-07-19 | Martin Nilsson | | #ifdef SPECIAL_PBKDF2
PIKEFUN string pbkdf2(string(8bit) password, string(8bit) salt,
int rounds, int bytes)
{
struct pike_string *dst = begin_shared_string(bytes);
NO_WIDE_STRING(password);
NO_WIDE_STRING(salt);
cmod_CONCAT_EVAL(pbkdf2_hmac_,NETTLE_NAME)(password->len,
(const uint8_t *)password->str,
rounds,
salt->len,
(const uint8_t *)salt->str,
bytes,
(uint8_t *)dst->str);
push_string(end_shared_string(dst));
}
#endif
|
d19e9c | 2017-08-01 | Martin Nilsson | | #ifdef HAVE_NETTLE_HMAC_H
PIKECLASS _HMAC
flags ID_PROTECTED;
{
EXTRA
{
|
f35ab0 | 2017-08-02 | Martin Nilsson | | lexical_inherit(1, MK_STRING("_HMAC"), 0, REPORT_ERROR);
|
d19e9c | 2017-08-01 | Martin Nilsson | | }
PIKECLASS State
{
CVAR struct HMAC_CTX(struct cmod_CONCAT_EVAL(NETTLE_NAME, _ctx)) ctx;
CVAR const struct nettle_hash *meta;
EXTRA
{
|
f35ab0 | 2017-08-02 | Martin Nilsson | | lexical_inherit(1, MK_STRING("State"), 0, REPORT_ERROR);
|
d19e9c | 2017-08-01 | Martin Nilsson | | }
PIKEFUN void create(string(8bit) passwd, void|int b)
{
const struct nettle_hash *meta = THIS->meta = ((struct Nettle_Hash_struct *)parent_storage(2, Nettle_Hash_program))->meta;
NO_WIDE_STRING(passwd);
HMAC_SET_KEY(&THIS->ctx, meta, passwd->len, (const uint8_t *)passwd->str);
}
PIKEFUN string(8bit) `()(string(8bit) text)
{
struct cmod_CONCAT_EVAL(NETTLE_NAME, _ctx) state;
int bytes = THIS->meta->digest_size;
struct pike_string *dst = begin_shared_string(bytes);
|
4c15af | 2017-08-01 | Martin Nilsson | | NO_WIDE_STRING(text);
|
d19e9c | 2017-08-01 | Martin Nilsson | |
memcpy(&state, &THIS->ctx.inner, THIS->meta->context_size);
THIS->meta->update(&state, text->len, (const uint8_t *)text->str);
hmac_digest(&THIS->ctx.outer, &THIS->ctx.inner, &state,
THIS->meta, THIS->meta->digest_size, (uint8_t *)dst->str);
push_string(end_shared_string(dst));
}
PIKEFUN object update(string(8bit) data)
optflags OPT_SIDE_EFFECT;
rawtype tFunc(tStr8, tObjImpl_NETTLE_HASH_STATE);
{
|
4c15af | 2017-08-01 | Martin Nilsson | | NO_WIDE_STRING(data);
|
d19e9c | 2017-08-01 | Martin Nilsson | | THIS->meta->update(&THIS->ctx.state, data->len, (const uint8_t *)data->str);
push_object(this_object());
}
PIKEFUN object init(string(8bit)|void data)
optflags OPT_SIDE_EFFECT;
rawtype tFunc(tOr(tVoid, tStr8), tObjImpl_NETTLE_HASH_STATE);
{
memcpy(&THIS->ctx.state, &THIS->ctx.inner, THIS->meta->context_size);
if(data)
|
4c15af | 2017-08-01 | Martin Nilsson | | {
NO_WIDE_STRING(data);
|
d19e9c | 2017-08-01 | Martin Nilsson | | THIS->meta->update(&THIS->ctx.state, data->len, (const uint8_t *)data->str);
|
4c15af | 2017-08-01 | Martin Nilsson | | }
|
d19e9c | 2017-08-01 | Martin Nilsson | | push_object(this_object());
}
PIKEFUN string(8bit) digest(int(0..)|void length)
{
int bytes = THIS->meta->digest_size;
struct pike_string *dst;
if(length)
bytes = MINIMUM(bytes, length->u.integer);
dst = begin_shared_string(bytes);
hmac_digest(&THIS->ctx.outer, &THIS->ctx.inner, &THIS->ctx.state,
THIS->meta, bytes, (uint8_t *)dst->str);
push_string(end_shared_string(dst));
}
|
4c15af | 2017-08-01 | Martin Nilsson | | PIKEFUN string(8bit) digest_info(string(8bit) text)
{
struct external_variable_context loc;
apply_current(cmod_CONCAT_EVAL(f_Nettle_,PIKE_NAME,_cq__HMAC_State_update_fun_num),1);
loc.o = Pike_fp->current_object;
loc.parent_identifier = Pike_fp->fun;
if (loc.o->prog) {
loc.inherit = INHERIT_FROM_INT(loc.o->prog, loc.parent_identifier);
find_external_context(&loc, 2);
int id = find_identifier("pkcs_digest", loc.o->prog);
if( id<0 )
Pike_error("Could not find pkcs_digest.\n");
apply_low(loc.o, id + loc.inherit->identifier_level, 1);
}
else
Pike_error("Apply on parent of destructed object.\n");
}
|
d19e9c | 2017-08-01 | Martin Nilsson | | }
}
#endif
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | DOCSTART() @class State
*!
*! State for PIKE_NAME hashing.
*!
DOCEND()
PIKECLASS State
program_flags PROGRAM_NEEDS_PARENT|PROGRAM_USES_PARENT;
{
|
4561b6 | 2013-10-05 | Henrik Grubbström (Grubba) | | DOCSTART() @decl inherit Hash::State
DOCEND()
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | EXTRA
{
|
0bb0ef | 2013-10-19 | Henrik Grubbström (Grubba) | | |
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | */
|
f35ab0 | 2017-08-02 | Martin Nilsson | | lexical_inherit(1, MK_STRING("State"), 0, REPORT_ERROR);
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | }
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | |
CVAR struct cmod_CONCAT_EVAL(NETTLE_NAME, _ctx) NETTLE_NAME;
INIT
{
|
895c72 | 2014-03-29 | Henrik Grubbström (Grubba) | | struct Nettle_Hash_State_struct *instance;
ASSIGN_CURRENT_STORAGE(instance, struct Nettle_Hash_State_struct, 1,
Nettle_Hash_State_program);
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | |
|
69e263 | 2013-10-20 | Henrik Grubbström (Grubba) | | werror(cmod_STRFY_EVAL(PIKE_NAME) ".State->INIT\n");
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | |
cmod_CONCAT_EVAL(NETTLE_NAME, _init)(&THIS->NETTLE_NAME);
instance->ctx = &THIS->NETTLE_NAME;
}
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | }
DOCSTART() @endclass State
DOCEND()
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | }
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | | DOCSTART() @endclass PIKE_NAME
|
88064b | 2011-12-20 | Henrik Grubbström (Grubba) | | DOCEND()
|
86a727 | 2013-10-05 | Henrik Grubbström (Grubba) | |
|