mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 01:28:20 +00:00
Migrate free SHA* functions to SHA*Val::digest().
This commit is contained in:
parent
91f2cb2b64
commit
ddd306f00f
5 changed files with 80 additions and 81 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit 06682dbb15d26d2688bdc9ad76efec17d38dc80f
|
Subproject commit a8846fc5b004ffe4e3d00e826d0077ba19518192
|
|
@ -1 +1 @@
|
||||||
Subproject commit 91e3b8ad445cb4d8919b4ee1cc6f0753c3fa0a55
|
Subproject commit 834131cd0ec0f63cce9de818726fe6167dedbf34
|
|
@ -128,6 +128,28 @@ bool MD5Val::DoUnserialize(UnserialInfo* info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SHA1Val::digest(val_list& vlist, u_char result[SHA_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
SHA_CTX h;
|
||||||
|
sha1_init(&h);
|
||||||
|
loop_over_list(vlist, i)
|
||||||
|
{
|
||||||
|
Val* v = vlist[i];
|
||||||
|
if ( v->Type()->Tag() == TYPE_STRING )
|
||||||
|
{
|
||||||
|
const BroString* str = v->AsString();
|
||||||
|
sha1_update(&h, str->Bytes(), str->Len());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ODesc d(DESC_BINARY);
|
||||||
|
v->Describe(&d);
|
||||||
|
sha1_update(&h, (const u_char *) d.Bytes(), d.Len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sha1_final(&h, result);
|
||||||
|
}
|
||||||
|
|
||||||
bool SHA1Val::Init()
|
bool SHA1Val::Init()
|
||||||
{
|
{
|
||||||
sha1_init(&ctx);
|
sha1_init(&ctx);
|
||||||
|
@ -164,6 +186,28 @@ bool SHA1Val::DoUnserialize(UnserialInfo* info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SHA256Val::digest(val_list& vlist, u_char result[SHA256_DIGEST_LENGTH])
|
||||||
|
{
|
||||||
|
SHA256_CTX h;
|
||||||
|
sha256_init(&h);
|
||||||
|
loop_over_list(vlist, i)
|
||||||
|
{
|
||||||
|
Val* v = vlist[i];
|
||||||
|
if ( v->Type()->Tag() == TYPE_STRING )
|
||||||
|
{
|
||||||
|
const BroString* str = v->AsString();
|
||||||
|
sha256_update(&h, str->Bytes(), str->Len());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ODesc d(DESC_BINARY);
|
||||||
|
v->Describe(&d);
|
||||||
|
sha256_update(&h, (const u_char *) d.Bytes(), d.Len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sha256_final(&h, result);
|
||||||
|
}
|
||||||
|
|
||||||
bool SHA256Val::Init()
|
bool SHA256Val::Init()
|
||||||
{
|
{
|
||||||
sha256_init(&ctx);
|
sha256_init(&ctx);
|
||||||
|
|
|
@ -49,6 +49,8 @@ private:
|
||||||
|
|
||||||
class SHA1Val : public HashVal {
|
class SHA1Val : public HashVal {
|
||||||
public:
|
public:
|
||||||
|
static void digest(val_list& vlist, u_char result[SHA_DIGEST_LENGTH]);
|
||||||
|
|
||||||
SHA1Val() : HashVal(new OpaqueType("sha1")) { }
|
SHA1Val() : HashVal(new OpaqueType("sha1")) { }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -66,6 +68,8 @@ private:
|
||||||
|
|
||||||
class SHA256Val : public HashVal {
|
class SHA256Val : public HashVal {
|
||||||
public:
|
public:
|
||||||
|
static void digest(val_list& vlist, u_char result[SHA256_DIGEST_LENGTH]);
|
||||||
|
|
||||||
SHA256Val() : HashVal(new OpaqueType("sha256")) { }
|
SHA256Val() : HashVal(new OpaqueType("sha256")) { }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
55
src/bro.bif
55
src/bro.bif
|
@ -529,55 +529,6 @@ function piped_exec%(program: string, to_write: string%): bool
|
||||||
return new Val(1, TYPE_BOOL);
|
return new Val(1, TYPE_BOOL);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%%{
|
|
||||||
// TODO: Migrate these functions into SHA*Val, in the same vein as MD5Val.
|
|
||||||
static void hash_sha1_val(val_list& vlist, unsigned char digest[20])
|
|
||||||
{
|
|
||||||
SHA_CTX h;
|
|
||||||
|
|
||||||
sha1_init(&h);
|
|
||||||
loop_over_list(vlist, i)
|
|
||||||
{
|
|
||||||
Val* v = vlist[i];
|
|
||||||
if ( v->Type()->Tag() == TYPE_STRING )
|
|
||||||
{
|
|
||||||
const BroString* str = v->AsString();
|
|
||||||
sha1_update(&h, str->Bytes(), str->Len());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ODesc d(DESC_BINARY);
|
|
||||||
v->Describe(&d);
|
|
||||||
sha1_update(&h, (const u_char *) d.Bytes(), d.Len());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sha1_final(&h, digest);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void hash_sha256_val(val_list& vlist, unsigned char digest[32])
|
|
||||||
{
|
|
||||||
SHA256_CTX h;
|
|
||||||
|
|
||||||
sha256_init(&h);
|
|
||||||
loop_over_list(vlist, i)
|
|
||||||
{
|
|
||||||
Val* v = vlist[i];
|
|
||||||
if ( v->Type()->Tag() == TYPE_STRING )
|
|
||||||
{
|
|
||||||
const BroString* str = v->AsString();
|
|
||||||
sha256_update(&h, str->Bytes(), str->Len());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ODesc d(DESC_BINARY);
|
|
||||||
v->Describe(&d);
|
|
||||||
sha256_update(&h, (const u_char *) d.Bytes(), d.Len());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sha256_final(&h, digest);
|
|
||||||
}
|
|
||||||
%%}
|
|
||||||
|
|
||||||
%%{
|
%%{
|
||||||
#include "OpaqueVal.h"
|
#include "OpaqueVal.h"
|
||||||
%%}
|
%%}
|
||||||
|
@ -618,7 +569,7 @@ function md5_hash%(...%): string
|
||||||
function sha1_hash%(...%): string
|
function sha1_hash%(...%): string
|
||||||
%{
|
%{
|
||||||
unsigned char digest[SHA_DIGEST_LENGTH];
|
unsigned char digest[SHA_DIGEST_LENGTH];
|
||||||
hash_sha1_val(@ARG@, digest);
|
SHA1Val::digest(@ARG@, digest);
|
||||||
return new StringVal(sha1_digest_print(digest));
|
return new StringVal(sha1_digest_print(digest));
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -638,7 +589,7 @@ function sha1_hash%(...%): string
|
||||||
function sha256_hash%(...%): string
|
function sha256_hash%(...%): string
|
||||||
%{
|
%{
|
||||||
unsigned char digest[SHA256_DIGEST_LENGTH];
|
unsigned char digest[SHA256_DIGEST_LENGTH];
|
||||||
hash_sha256_val(@ARG@, digest);
|
SHA256Val::digest(@ARG@, digest);
|
||||||
return new StringVal(sha256_digest_print(digest));
|
return new StringVal(sha256_digest_print(digest));
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -659,7 +610,7 @@ function md5_hmac%(...%): string
|
||||||
%}
|
%}
|
||||||
|
|
||||||
## Constructs an MD5 handle to enable incremental hash computation. You can
|
## Constructs an MD5 handle to enable incremental hash computation. You can
|
||||||
## feed data to the ## returned opaque value with ## :bro:id:`md5_hash_update`
|
## feed data to the returned opaque value with ## :bro:id:`md5_hash_update`
|
||||||
## and finally need to call :bro:id:`md5_hash_finish` to finish the computation
|
## and finally need to call :bro:id:`md5_hash_finish` to finish the computation
|
||||||
## and get the final hash value.
|
## and get the final hash value.
|
||||||
##
|
##
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue