Skip to content
Snippets Groups Projects
Commit 925bf5fd authored by Pablo Correa's avatar Pablo Correa
Browse files

Removed files under DATA

parent 3365f527
No related branches found
No related tags found
No related merge requests found
/*
* Implementation of RIPEMD-128.
*
* Copyright (C) 2014 Legimet <legimet.calc@gmail.com>
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL I LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
* INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE AND ITS DOCUMENTATION, EVEN IF I HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* I SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
* I HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*/
#include <stdint.h>
#include <string.h>
#include "rmdcommon.h"
#include "rmd128.h"
void ripemd128_MDinit(dword *MDbuf) {
MDbuf[0] = initvals[0];
MDbuf[1] = initvals[1];
MDbuf[2] = initvals[2];
MDbuf[3] = initvals[3];
}
static inline void ripemd128_round1(dword *a, dword *b, dword *c, dword *d,
dword *ap, dword *bp, dword *cp, dword *dp, int i, dword *X) {
*a = rmd_rol(*a + rmd_f1(*b, *c, *d) + X[r[i]], s[i]);
*ap = rmd_rol(*ap + rmd_f4(*bp, *cp, *dp) + X[rprime[i]] + kprime[0], sprime[i]);
}
static inline void ripemd128_round2(dword *a, dword *b, dword *c, dword *d,
dword *ap, dword *bp, dword *cp, dword *dp, int i, dword *X) {
*a = rmd_rol(*a + rmd_f2(*b, *c, *d) + X[r[i]] + k[0], s[i]);
*ap = rmd_rol(*ap + rmd_f3(*bp, *cp, *dp) + X[rprime[i]] + kprime[1], sprime[i]);
}
static inline void ripemd128_round3(dword *a, dword *b, dword *c, dword *d,
dword *ap, dword *bp, dword *cp, dword *dp, int i, dword *X) {
*a = rmd_rol(*a + rmd_f3(*b, *c, *d) + X[r[i]] + k[1], s[i]);
*ap = rmd_rol(*ap + rmd_f2(*bp, *cp, *dp) + X[rprime[i]] + kprime[2], sprime[i]);
}
static inline void ripemd128_round4(dword *a, dword *b, dword *c, dword *d,
dword *ap, dword *bp, dword *cp, dword *dp, int i, dword *X) {
*a = rmd_rol(*a + rmd_f4(*b, *c, *d) + X[r[i]] + k[2], s[i]);
*ap = rmd_rol(*ap + rmd_f1(*bp, *cp, *dp) + X[rprime[i]], sprime[i]);
}
void ripemd128_compress(dword *MDbuf, dword *X) {
dword a = MDbuf[0], b = MDbuf[1], c = MDbuf[2], d = MDbuf[3];
dword ap = MDbuf[0], bp = MDbuf[1], cp = MDbuf[2], dp = MDbuf[3];
int i;
for (i = 0; i < 16;) {
ripemd128_round1(&a, &b, &c, &d, &ap, &bp, &cp, &dp, i++, X);
ripemd128_round1(&d, &a, &b, &c, &dp, &ap, &bp, &cp, i++, X);
ripemd128_round1(&c, &d, &a, &b, &cp, &dp, &ap, &bp, i++, X);
ripemd128_round1(&b, &c, &d, &a, &bp, &cp, &dp, &ap, i++, X);
}
for (i = 16; i < 32;) {
ripemd128_round2(&a, &b, &c, &d, &ap, &bp, &cp, &dp, i++, X);
ripemd128_round2(&d, &a, &b, &c, &dp, &ap, &bp, &cp, i++, X);
ripemd128_round2(&c, &d, &a, &b, &cp, &dp, &ap, &bp, i++, X);
ripemd128_round2(&b, &c, &d, &a, &bp, &cp, &dp, &ap, i++, X);
}
for (i = 32; i < 48;) {
ripemd128_round3(&a, &b, &c, &d, &ap, &bp, &cp, &dp, i++, X);
ripemd128_round3(&d, &a, &b, &c, &dp, &ap, &bp, &cp, i++, X);
ripemd128_round3(&c, &d, &a, &b, &cp, &dp, &ap, &bp, i++, X);
ripemd128_round3(&b, &c, &d, &a, &bp, &cp, &dp, &ap, i++, X);
}
for (i = 48; i < 64;) {
ripemd128_round4(&a, &b, &c, &d, &ap, &bp, &cp, &dp, i++, X);
ripemd128_round4(&d, &a, &b, &c, &dp, &ap, &bp, &cp, i++, X);
ripemd128_round4(&c, &d, &a, &b, &cp, &dp, &ap, &bp, i++, X);
ripemd128_round4(&b, &c, &d, &a, &bp, &cp, &dp, &ap, i++, X);
}
c += MDbuf[1] + dp;
MDbuf[1] = MDbuf[2] + d + ap;
MDbuf[2] = MDbuf[3] + a + bp;
MDbuf[3] = MDbuf[0] + b + cp;
MDbuf[0] = c;
}
void ripemd128_MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen) {
dword X[16] = {0}; /* Initialize to all 0 */
dword i;
/* Copy bytes from strptr into X */
for (i = 0; i < (lswlen & 63); i++) {
X[i >> 2] |= (dword)strptr[i] << ((i & 3) << 3);
}
/* Add a 1 bit for padding */
X[i >> 2] |= 128 << ((i & 3) << 3);
/* length in bits is at least 448 mod 512, second block needed */
if ((lswlen & 63) >= 56) {
ripemd128_compress(MDbuf, X);
memset(X, 0, 64);
}
/* Append the 64-bit length in the last 2 words, low-order word first */
X[14] = lswlen << 3;
X[15] = (mswlen << 3) + (lswlen >> 29);
ripemd128_compress(MDbuf, X); /* Compress the final block */
}
/*
* Header file for implementation of RIPEMD-128.
*
* Copyright (C) 2014 Legimet <legimet.calc@gmail.com>
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL I LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
* INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE AND ITS DOCUMENTATION, EVEN IF I HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* I SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
* I HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef RMD128_H
#define RMD128_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
typedef uint32_t dword;
typedef uint16_t word;
typedef uint8_t byte;
void ripemd128_MDinit(dword *MDbuf);
void ripemd128_compress(dword *MDbuf, dword *X);
void ripemd128_MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen);
#ifdef __cplusplus
}
#endif
#endif
/*
* Implementation of RIPEMD-160.
*
* Copyright (C) 2014 Legimet <legimet.calc@gmail.com>
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL I LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
* INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE AND ITS DOCUMENTATION, EVEN IF I HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* I SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
* I HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*/
#include <stdint.h>
#include <string.h>
#include "rmdcommon.h"
#include "rmd160.h"
void ripemd160_MDinit(dword *MDbuf) {
MDbuf[0] = initvals[0];
MDbuf[1] = initvals[1];
MDbuf[2] = initvals[2];
MDbuf[3] = initvals[3];
MDbuf[4] = initvals[4];
}
static inline void ripemd160_round1(dword *a, dword *b, dword *c, dword *d, dword *e,
dword *ap, dword *bp, dword *cp, dword *dp, dword *ep, int i, dword *X) {
*a = rmd_rol(*a + rmd_f1(*b, *c, *d) + X[r[i]], s[i]) + *e;
*c = rmd_rol(*c, 10);
*ap = rmd_rol(*ap + rmd_f5(*bp, *cp, *dp) + X[rprime[i]] + kprime[0], sprime[i]) + *ep;
*cp = rmd_rol(*cp, 10);
}
static inline void ripemd160_round2(dword *a, dword *b, dword *c, dword *d, dword *e,
dword *ap, dword *bp, dword *cp, dword *dp, dword *ep, int i, dword *X) {
*a = rmd_rol(*a + rmd_f2(*b, *c, *d) + X[r[i]] + k[0], s[i]) + *e;
*c = rmd_rol(*c, 10);
*ap = rmd_rol(*ap + rmd_f4(*bp, *cp, *dp) + X[rprime[i]] + kprime[1], sprime[i]) + *ep;
*cp = rmd_rol(*cp, 10);
}
static inline void ripemd160_round3(dword *a, dword *b, dword *c, dword *d, dword *e,
dword *ap, dword *bp, dword *cp, dword *dp, dword *ep, int i, dword *X) {
*a = rmd_rol(*a + rmd_f3(*b, *c, *d) + X[r[i]] + k[1], s[i]) + *e;
*c = rmd_rol(*c, 10);
*ap = rmd_rol(*ap + rmd_f3(*bp, *cp, *dp) + X[rprime[i]] + kprime[2], sprime[i]) + *ep;
*cp = rmd_rol(*cp, 10);
}
static inline void ripemd160_round4(dword *a, dword *b, dword *c, dword *d, dword *e,
dword *ap, dword *bp, dword *cp, dword *dp, dword *ep, int i, dword *X) {
*a = rmd_rol(*a + rmd_f4(*b, *c, *d) + X[r[i]] + k[2], s[i]) + *e;
*c = rmd_rol(*c, 10);
*ap = rmd_rol(*ap + rmd_f2(*bp, *cp, *dp) + X[rprime[i]] + kprime[3], sprime[i]) + *ep;
*cp = rmd_rol(*cp, 10);
}
static inline void ripemd160_round5(dword *a, dword *b, dword *c, dword *d, dword *e,
dword *ap, dword *bp, dword *cp, dword *dp, dword *ep, int i, dword *X) {
*a = rmd_rol(*a + rmd_f5(*b, *c, *d) + X[r[i]] + k[3], s[i]) + *e;
*c = rmd_rol(*c, 10);
*ap = rmd_rol(*ap + rmd_f1(*bp, *cp, *dp) + X[rprime[i]], sprime[i]) + *ep;
*cp = rmd_rol(*cp, 10);
}
void ripemd160_compress(dword *MDbuf, dword *X) {
dword a = MDbuf[0], b = MDbuf[1], c = MDbuf[2], d = MDbuf[3], e = MDbuf[4];
dword ap = MDbuf[0], bp = MDbuf[1], cp = MDbuf[2], dp = MDbuf[3], ep = MDbuf[4];
int i;
for (i = 0; i < 15;) {
ripemd160_round1(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
ripemd160_round1(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
ripemd160_round1(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
ripemd160_round1(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
ripemd160_round1(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i++, X);
}
ripemd160_round1(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
for (i = 16; i < 31;) {
ripemd160_round2(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
ripemd160_round2(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
ripemd160_round2(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
ripemd160_round2(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i++, X);
ripemd160_round2(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
}
ripemd160_round2(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
for (i = 32; i < 47;) {
ripemd160_round3(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
ripemd160_round3(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
ripemd160_round3(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i++, X);
ripemd160_round3(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
ripemd160_round3(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
}
ripemd160_round3(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
for (i = 48; i < 63;) {
ripemd160_round4(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
ripemd160_round4(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i++, X);
ripemd160_round4(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
ripemd160_round4(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
ripemd160_round4(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
}
ripemd160_round4(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
for (i = 64; i < 79;) {
ripemd160_round5(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i++, X);
ripemd160_round5(&a, &b, &c, &d, &e, &ap, &bp, &cp, &dp, &ep, i++, X);
ripemd160_round5(&e, &a, &b, &c, &d, &ep, &ap, &bp, &cp, &dp, i++, X);
ripemd160_round5(&d, &e, &a, &b, &c, &dp, &ep, &ap, &bp, &cp, i++, X);
ripemd160_round5(&c, &d, &e, &a, &b, &cp, &dp, &ep, &ap, &bp, i++, X);
}
ripemd160_round5(&b, &c, &d, &e, &a, &bp, &cp, &dp, &ep, &ap, i, X);
c += MDbuf[1] + dp;
MDbuf[1] = MDbuf[2] + d + ep;
MDbuf[2] = MDbuf[3] + e + ap;
MDbuf[3] = MDbuf[4] + a + bp;
MDbuf[4] = MDbuf[0] + b + cp;
MDbuf[0] = c;
}
void ripemd160_MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen) {
dword X[16] = {0}; /* Initialize to all 0 */
dword i;
/* Copy bytes from strptr into X */
for (i = 0; i < (lswlen & 63); i++) {
X[i >> 2] |= (dword)strptr[i] << ((i & 3) << 3);
}
/* Add a 1 bit for padding */
X[i >> 2] |= 128 << ((i & 3) << 3);
/* length in bits is at least 448 mod 512, second block needed */
if ((lswlen & 63) >= 56) {
ripemd160_compress(MDbuf, X);
memset(X, 0, 64);
}
/* Append the 64-bit length in the last 2 words, low-order word first */
X[14] = lswlen << 3;
X[15] = (mswlen << 3) + (lswlen >> 29);
ripemd160_compress(MDbuf, X); /* Compress the final block */
}
/*
* Header file for implementation of RIPEMD-160.
*
* Copyright (C) 2014 Legimet <legimet.calc@gmail.com>
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL I LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
* INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE AND ITS DOCUMENTATION, EVEN IF I HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* I SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
* I HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef RMD160_H
#define RMD160_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
typedef uint32_t dword;
typedef uint16_t word;
typedef uint8_t byte;
void ripemd160_MDinit(dword *MDbuf);
void ripemd160_compress(dword *MDbuf, dword *X);
void ripemd160_MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen);
#ifdef __cplusplus
}
#endif
#endif
/*
* Common constants and functions for RIPEMD-128 and RIPEMD-160.
*
* Copyright (C) 2014 Legimet <legimet.calc@gmail.com>
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL I LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
* INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE AND ITS DOCUMENTATION, EVEN IF I HAVE BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* I SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
* I HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef RMDCOMMON_H
#define RMDCOMMON_H
#include <stdint.h>
/* Initial values */
static const uint32_t initvals[5] = {
0x67452301,
0xefcdab89,
0x98badcfe,
0x10325476,
0xc3d2e1f0
};
/* Added constants */
static const uint32_t k[5] = {
0x5a827999,
0x6ed9eba1,
0x8f1bbcdc,
0xa953fd4e
};
static const uint32_t kprime[5] = {
0x50a28be6,
0x5c4dd124,
0x6d703ef3,
0x7a6d76e9,
};
/* Message selection */
static const int r[80] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
};
static const int rprime[80] = {
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
};
/* Number of bits for left rotations */
static const int s[80] = {
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
};
static const int sprime[80] = {
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
};
static inline uint32_t rmd_f1(uint32_t x, uint32_t y, uint32_t z) {
return x ^ y ^ z;
}
static inline uint32_t rmd_f2(uint32_t x, uint32_t y, uint32_t z) {
return (x & y) | (~x & z);
}
static inline uint32_t rmd_f3(uint32_t x, uint32_t y, uint32_t z) {
return (x | ~y) ^ z;
}
static inline uint32_t rmd_f4(uint32_t x, uint32_t y, uint32_t z) {
return (x & z) | (y & ~z);
}
static inline uint32_t rmd_f5(uint32_t x, uint32_t y, uint32_t z) {
return x ^ (y | ~z);
}
static inline uint32_t rmd_rol(uint32_t n, int bits) {
return ((n << bits) | (n >> (32 - bits)));
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment