mirror of
https://github.com/openssl/openssl.git
synced 2024-11-29 04:55:11 +08:00
Camellia update: make it respect NO_[INLINE_]ASM and typo in assembler.
This commit is contained in:
parent
a79b668b8f
commit
dec95a126a
@ -1133,6 +1133,6 @@ my ($s0,$s1,$s2,$s3) = @T;
|
||||
&function_end("Camellia_cbc_encrypt");
|
||||
}
|
||||
|
||||
&asciz("Camellia for x86 by <appro@openssl.org>");
|
||||
&asciz("Camellia for x86 by <appro\@openssl.org>");
|
||||
|
||||
&asm_finish();
|
||||
|
@ -859,7 +859,7 @@ Camellia_cbc_encrypt:
|
||||
ret
|
||||
.size Camellia_cbc_encrypt,.-Camellia_cbc_encrypt
|
||||
|
||||
.asciz "Camellia for x86_64 by <appro@openssl.org>"
|
||||
.asciz "Camellia for x86_64 by <appro\@openssl.org>"
|
||||
___
|
||||
}
|
||||
|
||||
|
@ -91,10 +91,24 @@
|
||||
# if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
|
||||
# define RightRotate(x, s) _lrotr(x, s)
|
||||
# define LeftRotate(x, s) _lrotl(x, s)
|
||||
# if _MSC_VER >= 1400
|
||||
# define SWAP(x) _byteswap_ulong(x)
|
||||
# else
|
||||
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
|
||||
# endif
|
||||
# define GETU32(p) SWAP(*((u32 *)(p)))
|
||||
# define PUTU32(p,v) (*((u32 *)(p)) = SWAP((v)))
|
||||
# elif defined(__GNUC__) && __GNUC__>=2
|
||||
# if defined(__i386) || defined(__x86_64)
|
||||
# define RightRotate(x,s) ({u32 ret; asm ("rorl %1,%0":"=r"(ret):"I"(s),"0"(x):"cc"); ret; })
|
||||
# define LeftRotate(x,s) ({u32 ret; asm ("roll %1,%0":"=r"(ret):"I"(s),"0"(x):"cc"); ret; })
|
||||
# if defined(B_ENDIAN) /* stratus.com does it */
|
||||
# define GETU32(p) (*(u32 *)(p))
|
||||
# define PUTU32(p,v) (*(u32 *)(p)=(v))
|
||||
# else
|
||||
# define GETU32(p) ({u32 r=*(const u32 *)(p); asm("bswapl %0":"=r"(r):"0"(r)); r; })
|
||||
# define PUTU32(p,v) ({u32 r=(v); asm("bswapl %0":"=r"(r):"0"(r)); *(u32 *)(p)=r; })
|
||||
# endif
|
||||
# elif defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
|
||||
defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__)
|
||||
# define LeftRotate(x,s) ({u32 ret; asm ("rlwinm %0,%1,%2,0,31":"=r"(ret):"r"(x),"I"(s)); ret; })
|
||||
@ -102,13 +116,20 @@
|
||||
# elif defined(__s390x__)
|
||||
# define LeftRotate(x,s) ({u32 ret; asm ("rll %0,%1,%2":"=r"(ret):"r"(x),"I"(s)); ret; })
|
||||
# define RightRotate(x,s) LeftRotate(x,(32-s))
|
||||
# define GETU32(p) (*(u32 *)(p))
|
||||
# define PUTU32(p,v) (*(u32 *)(p)=(v))
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(RightRotate) && !defined(LeftRotate)
|
||||
#define RightRotate(x, s) ( ((x) >> (s)) + ((x) << (32 - s)) )
|
||||
#define LeftRotate(x, s) ( ((x) << (s)) + ((x) >> (32 - s)) )
|
||||
# define RightRotate(x, s) ( ((x) >> (s)) + ((x) << (32 - s)) )
|
||||
# define LeftRotate(x, s) ( ((x) << (s)) + ((x) >> (32 - s)) )
|
||||
#endif
|
||||
|
||||
#if !defined(GETU32) && !defined(PUTU32)
|
||||
# define GETU32(p) (((u32)(p)[0] << 24) ^ ((u32)(p)[1] << 16) ^ ((u32)(p)[2] << 8) ^ ((u32)(p)[3]))
|
||||
# define PUTU32(p,v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >> 8), (p)[3] = (u8)(v))
|
||||
#endif
|
||||
|
||||
/* S-box data */
|
||||
|
@ -71,30 +71,6 @@
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned char u8;
|
||||
|
||||
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
|
||||
# if _MSC_VER >= 1400
|
||||
# define SWAP(x) _byteswap_ulong(x)
|
||||
# else
|
||||
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
|
||||
# endif
|
||||
# define GETU32(p) SWAP(*((u32 *)(p)))
|
||||
# define PUTU32(p,v) (*((u32 *)(p)) = SWAP((v)))
|
||||
#elif defined(__GNUC__) && __GNUC__>=2 && (defined(__i386) || defined(__x86_64)) && !defined(PEDANTIC)
|
||||
# if defined(B_ENDIAN) /* stratus.com does it */
|
||||
# define GETU32(p) (*(u32 *)(p))
|
||||
# define PUTU32(p,v) (*(u32 *)(p)=(v))
|
||||
# else
|
||||
# define GETU32(p) ({u32 r=*(const u32 *)(p); asm("bswapl %0":"=r"(r):"0"(r)); r; })
|
||||
# define PUTU32(p,v) ({u32 r=(v); asm("bswapl %0":"=r"(r):"0"(r)); *(u32 *)(p)=r; })
|
||||
# endif
|
||||
#elif defined(__s390__) || defined(__s390x__)
|
||||
# define GETU32(p) (*(u32 *)(p))
|
||||
# define PUTU32(p,v) (*(u32 *)(p)=(v))
|
||||
#else
|
||||
# define GETU32(p) (((u32)(p)[0] << 24) ^ ((u32)(p)[1] << 16) ^ ((u32)(p)[2] << 8) ^ ((u32)(p)[3]))
|
||||
# define PUTU32(p,v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >> 8), (p)[3] = (u8)(v))
|
||||
#endif
|
||||
|
||||
int Camellia_Ekeygen(int keyBitLength, const u8 *rawKey, KEY_TABLE_TYPE keyTable);
|
||||
void Camellia_EncryptBlock_Rounds(int grandRounds, const u8 plaintext[],
|
||||
const KEY_TABLE_TYPE keyTable, u8 ciphertext[]);
|
||||
|
Loading…
Reference in New Issue
Block a user