19 #include <openssl/bio.h>
20 #include <openssl/buffer.h>
21 #include <openssl/evp.h>
54 #include <openssl/rand.h>
55 #include <openssl/md5.h>
56 #include <openssl/sha.h>
69 int fd = open(
"/dev/random", O_RDONLY);
73 len = read(fd, buf, 64);
83 return (RAND_bytes(buf, len));
97 extern void sha512sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2) {
101 SHA512_Update(&c, data, len);
103 SHA512_Update(&c, data2, len2);
105 SHA512_Final(buff, &c);
114 extern void sha512sum(
unsigned char *buff,
const void *data,
unsigned long len) {
127 extern void sha256sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2) {
131 SHA256_Update(&c, data, len);
133 SHA256_Update(&c, data2, len2);
135 SHA256_Final(buff, &c);
144 extern void sha256sum(
unsigned char *buff,
const void *data,
unsigned long len) {
156 extern void sha1sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2) {
160 SHA_Update(&c, data, len);
162 SHA_Update(&c, data2, len2);
173 extern void sha1sum(
unsigned char *buff,
const void *data,
unsigned long len) {
185 extern void md5sum2(
unsigned char *buff,
const void *data,
unsigned long len,
const void *data2,
unsigned long len2) {
189 MD5_Update(&c, data, len);
191 MD5_Update(&c, data2, len2);
202 extern void md5sum(
unsigned char *buff,
const void *data,
unsigned long len) {
203 md5sum2(buff, data, len, NULL, 0);
206 static int _digest_cmp(
unsigned char *md51,
unsigned char *md52,
int len) {
210 for(cnt = 0; cnt < len; cnt ++) {
211 chk += md51[cnt] & ~md52[cnt];
223 extern int md5cmp(
unsigned char *digest1,
unsigned char *digest2) {
224 return (_digest_cmp(digest1, digest2, 16));
233 extern int sha1cmp(
unsigned char *digest1,
unsigned char *digest2) {
234 return (_digest_cmp(digest1, digest2, 20));
243 extern int sha256cmp(
unsigned char *digest1,
unsigned char *digest2) {
244 return (_digest_cmp(digest1, digest2, 32));
253 extern int sha512cmp(
unsigned char *digest1,
unsigned char *digest2) {
254 return (_digest_cmp(digest1, digest2, 64));
257 static void _hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen,
258 void (*func)(
unsigned char *,
const void *,
unsigned long,
const void *,
unsigned long),
short alglen) {
259 unsigned char okey[64], ikey[64];
266 memcpy(ikey, key, klen);
267 memcpy(okey, key, klen);
270 memcpy(ikey, okey, klen);
273 for (bcnt = 0; bcnt < 64; bcnt++) {
278 func(buff, ikey, 64, data, len);
279 func(buff, okey, 64, buff, alglen);
290 extern void md5hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen) {
291 _hmac(buff, data, len, key, klen,
md5sum2, 16);
302 extern void sha1hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen) {
303 _hmac(buff, data, len, key, klen,
sha1sum2, 20);
314 extern void sha256hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen) {
315 _hmac(buff, data, len, key, klen,
sha256sum2, 32);
326 extern void sha512hmac(
unsigned char *buff,
const void *data,
unsigned long len,
const void *key,
unsigned long klen) {
327 _hmac(buff, data, len, key, klen,
sha512sum2, 64);
342 if (str && strlen(str)) {
360 while(isspace(cur[0])) {
372 extern char *
rtrim(
const char *str) {
374 char *cur = (
char *)str;
380 len = strlen(str) - 1;
381 while(len && isspace(cur[len])) {
393 extern char *
trim(
const char *str) {
394 char *cur = (
char *)str;
406 return ((((uint64_t)tv->tv_sec + 2208988800u) << 32) + ((uint32_t)tv->tv_usec * 4294.967296));
412 static uint16_t _checksum(
const void *data,
int len,
const uint16_t check) {
414 const uint32_t *arr = (uint32_t *)data;
424 csum += *(uint16_t *)arr;
425 arr = (uint32_t *)((uint16_t *)arr + 1);
431 csum += *(uint8_t *)arr;
441 csum = (csum & 0xffff) + (csum >> 16);
444 return (~(uint16_t)csum);
452 extern uint16_t
checksum(
const void *data,
int len) {
453 return (_checksum(data, len, 0));
464 return (_checksum(data, len, ~checksum));
473 extern uint16_t
verifysum(
const void *data,
int len,
const uint16_t check) {
474 return (_checksum(data, len, check));
484 extern void touch(
const char *filename, uid_t user, gid_t group) {
487 extern void touch(
const char *filename) {
491 fd = creat(filename, 0600);
494 res = chown(filename, user, group);
506 extern char *
b64enc_buf(
const char *message, uint32_t len,
int nonl) {
512 encodedSize = 1.36*len;
513 buffer =
objalloc(encodedSize+1, NULL);
515 b64 = BIO_new(BIO_f_base64());
516 bmem = BIO_new(BIO_s_mem());
517 b64 = BIO_push(b64, bmem);
519 BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
521 BIO_write(b64, message, len);
523 BIO_get_mem_ptr(b64, &ptr);
525 buffer =
objalloc(ptr->length+1, NULL);
526 memcpy(buffer, ptr->data, ptr->length);
539 extern char *
b64enc(
const char *message,
int nonl) {
540 return b64enc_buf(message, strlen(message), nonl);
uint64_t tvtontp64(struct timeval *tv)
Convert a timeval struct to 64bit NTP time.
int md5cmp(unsigned char *digest1, unsigned char *digest2)
Compare two md5 hashes.
int strlenzero(const char *str)
Check if a string is zero length.
uint16_t checksum(const void *data, int len)
Obtain the checksum for a buffer.
void sha256sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-256 hash.
void sha256sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA2-256 hash accross 2 data chunks.
void sha256hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-256.
void * objalloc(int size, objdestroy)
Allocate a referenced lockable object.
uint16_t checksum_add(const uint16_t checksum, const void *data, int len)
Obtain the checksum for a buffer adding a checksum.
int sha1cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA1 hashes.
void md5hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) MD5.
void sha512sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA2-512 hash.
uint16_t verifysum(const void *data, int len, const uint16_t check)
Verify a checksum.
char * rtrim(const char *str)
Trim white space at the end of a string.
DTS Application library API Include file.
void sha1sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA1 hash accross 2 data chunks.
void md5sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the MD5 hash accross 2 data chunks.
void sha1sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the SHA1 hash.
char * trim(const char *str)
Trim whitesapce from the beggining and end of a string.
int sha256cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-256 hashes.
int genrand(void *buf, int len)
Generate random sequence.
void touch(const char *filename, uid_t user, gid_t group)
Create a file and set user and group.
char * ltrim(char *str)
Trim white space at the begining of a string.
void seedrand(void)
Seed openssl random number generator.
int sha512cmp(unsigned char *digest1, unsigned char *digest2)
Compare two SHA2-512 hashes.
void sha512hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA2-512.
char * b64enc(const char *message, int nonl)
Base 64 encode a string.
void sha512sum2(unsigned char *buff, const void *data, unsigned long len, const void *data2, unsigned long len2)
Calculate the SHA2-512 hash accross 2 data chunks.
void md5sum(unsigned char *buff, const void *data, unsigned long len)
Calculate the MD5 hash.
void sha1hmac(unsigned char *buff, const void *data, unsigned long len, const void *key, unsigned long klen)
Hash Message Authentication Codes (HMAC) SHA1.
char * b64enc_buf(const char *message, uint32_t len, int nonl)
Base 64 encode a buffer.