summaryrefslogtreecommitdiff
path: root/sys/crypto/set_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/crypto/set_key.c')
-rw-r--r--sys/crypto/set_key.c169
1 files changed, 83 insertions, 86 deletions
diff --git a/sys/crypto/set_key.c b/sys/crypto/set_key.c
index 31b9be0f648..cceb3fb5d67 100644
--- a/sys/crypto/set_key.c
+++ b/sys/crypto/set_key.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: set_key.c,v 1.2 2002/10/27 13:24:26 miod Exp $ */
+/* $OpenBSD: set_key.c,v 1.3 2013/11/18 18:49:53 brad Exp $ */
/* lib/des/set_key.c */
/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au)
@@ -66,27 +66,26 @@ static int check_parity();
int des_check_key=0;
-void des_set_odd_parity(key)
-des_cblock (*key);
- {
+void
+des_set_odd_parity(des_cblock (*key))
+{
int i;
- for (i=0; i<DES_KEY_SZ; i++)
- (*key)[i]=odd_parity[(*key)[i]];
- }
+ for (i = 0; i < DES_KEY_SZ; i++)
+ (*key)[i] = odd_parity[(*key)[i]];
+}
-static int check_parity(key)
-des_cblock (*key);
- {
+static int
+check_parity(des_cblock (*key))
+{
int i;
- for (i=0; i<DES_KEY_SZ; i++)
- {
+ for (i = 0; i < DES_KEY_SZ; i++) {
if ((*key)[i] != odd_parity[(*key)[i]])
return(0);
- }
- return(1);
}
+ return (1);
+}
/* Weak and semi week keys as take from
* %A D.W. Davies
@@ -118,119 +117,117 @@ static des_cblock weak_keys[NUM_WEAK_KEY]={
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};
-int des_is_weak_key(key)
-des_cblock (*key);
- {
+int
+des_is_weak_key(des_cblock (*key))
+{
int i;
- for (i=0; i<NUM_WEAK_KEY; i++)
+ for (i = 0; i < NUM_WEAK_KEY; i++) {
/* Added == 0 to comparision, I obviously don't run
* this section very often :-(, thanks to
* engineering@MorningStar.Com for the fix
* eay 93/06/29 */
- if (bcmp(weak_keys[i],key,sizeof(des_cblock)) == 0) return(1);
- return(0);
+ if (bcmp(weak_keys[i], key, sizeof(des_cblock)) == 0)
+ return (1);
}
+ return (0);
+}
/* NOW DEFINED IN des_local.h
* See ecb_encrypt.c for a pseudo description of these macros.
- * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+ * #define PERM_OP(a, b, t, n, m) ((t) = ((((a) >> (n))^(b)) & (m)),\
* (b)^=(t),\
- * (a)=((a)^((t)<<(n))))
+ * (a) = ((a)^((t) << (n))))
*/
-#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
- (a)=(a)^(t)^(t>>(16-(n))))
+#define HPERM_OP(a, t, n, m) ((t) = ((((a) << (16 - (n)))^(a)) & (m)),\
+ (a) = (a)^(t)^(t >> (16 - (n))))
-static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
+static int shifts2[16]={0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0};
/* return 0 if key parity is odd (correct),
* return -1 if key parity error,
* return -2 if illegal weak key.
*/
-int des_set_key(key, schedule)
-des_cblock (*key);
-des_key_schedule schedule;
- {
- register u_int32_t c,d,t,s;
+int
+des_set_key(des_cblock (*key), des_key_schedule schedule)
+{
+ register u_int32_t c, d, t, s;
register unsigned char *in;
register u_int32_t *k;
register int i;
- if (des_check_key)
- {
+ if (des_check_key) {
if (!check_parity(key))
return(-1);
if (des_is_weak_key(key))
return(-2);
- }
+ }
- k=(u_int32_t *)schedule;
- in=(unsigned char *)key;
+ k = (u_int32_t *) schedule;
+ in = (unsigned char *) key;
- c2l(in,c);
- c2l(in,d);
+ c2l(in, c);
+ c2l(in, d);
/* do PC1 in 60 simple operations */
-/* PERM_OP(d,c,t,4,0x0f0f0f0fL);
- HPERM_OP(c,t,-2, 0xcccc0000L);
- HPERM_OP(c,t,-1, 0xaaaa0000L);
- HPERM_OP(c,t, 8, 0x00ff0000L);
- HPERM_OP(c,t,-1, 0xaaaa0000L);
- HPERM_OP(d,t,-8, 0xff000000L);
- HPERM_OP(d,t, 8, 0x00ff0000L);
- HPERM_OP(d,t, 2, 0x33330000L);
- d=((d&0x00aa00aaL)<<7L)|((d&0x55005500L)>>7L)|(d&0xaa55aa55L);
- d=(d>>8)|((c&0xf0000000L)>>4);
- c&=0x0fffffffL; */
+/* PERM_OP(d, c, t, 4, 0x0f0f0f0fL);
+ HPERM_OP(c, t, -2, 0xcccc0000L);
+ HPERM_OP(c, t, -1, 0xaaaa0000L);
+ HPERM_OP(c, t, 8, 0x00ff0000L);
+ HPERM_OP(c, t, -1, 0xaaaa0000L);
+ HPERM_OP(d, t, -8, 0xff000000L);
+ HPERM_OP(d, t, 8, 0x00ff0000L);
+ HPERM_OP(d, t, 2, 0x33330000L);
+ d = ((d & 0x00aa00aaL) << 7L) | ((d & 0x55005500L) >> 7L) | (d & 0xaa55aa55L);
+ d = (d >> 8) | ((c & 0xf0000000L) >> 4);
+ c &= 0x0fffffffL; */
/* I now do it in 47 simple operations :-)
* Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
* for the inspiration. :-) */
- PERM_OP (d,c,t,4,0x0f0f0f0fL);
- HPERM_OP(c,t,-2,0xcccc0000L);
- HPERM_OP(d,t,-2,0xcccc0000L);
- PERM_OP (d,c,t,1,0x55555555L);
- PERM_OP (c,d,t,8,0x00ff00ffL);
- PERM_OP (d,c,t,1,0x55555555L);
- d= (((d&0x000000ffL)<<16L)| (d&0x0000ff00L) |
- ((d&0x00ff0000L)>>16L)|((c&0xf0000000L)>>4L));
- c&=0x0fffffffL;
-
- for (i=0; i<ITERATIONS; i++)
- {
+ PERM_OP (d, c, t, 4, 0x0f0f0f0fL);
+ HPERM_OP(c, t, -2, 0xcccc0000L);
+ HPERM_OP(d, t, -2, 0xcccc0000L);
+ PERM_OP (d, c, t, 1, 0x55555555L);
+ PERM_OP (c, d, t, 8, 0x00ff00ffL);
+ PERM_OP (d, c, t, 1, 0x55555555L);
+ d = (((d & 0x000000ffL) << 16L) | (d & 0x0000ff00L) |
+ ((d & 0x00ff0000L) >> 16L) | ((c & 0xf0000000L) >> 4L));
+ c &= 0x0fffffffL;
+
+ for (i = 0; i < ITERATIONS; i++) {
if (shifts2[i])
- { c=((c>>2L)|(c<<26L)); d=((d>>2L)|(d<<26L)); }
+ { c = ((c >> 2L) | (c << 26L)); d = ((d >> 2L) | (d << 26L)); }
else
- { c=((c>>1L)|(c<<27L)); d=((d>>1L)|(d<<27L)); }
- c&=0x0fffffffL;
- d&=0x0fffffffL;
+ { c = ((c >> 1L) | (c << 27L)); d = ((d >> 1L) | (d << 27L)); }
+ c &= 0x0fffffffL;
+ d &= 0x0fffffffL;
/* could be a few less shifts but I am to lazy at this
* point in time to investigate */
- s= des_skb[0][ (c )&0x3f ]|
- des_skb[1][((c>> 6)&0x03)|((c>> 7L)&0x3c)]|
- des_skb[2][((c>>13)&0x0f)|((c>>14L)&0x30)]|
- des_skb[3][((c>>20)&0x01)|((c>>21L)&0x06) |
- ((c>>22L)&0x38)];
- t= des_skb[4][ (d )&0x3f ]|
- des_skb[5][((d>> 7L)&0x03)|((d>> 8L)&0x3c)]|
- des_skb[6][ (d>>15L)&0x3f ]|
- des_skb[7][((d>>21L)&0x0f)|((d>>22L)&0x30)];
+ s = des_skb[0][ (c ) & 0x3f ]|
+ des_skb[1][((c >> 6) & 0x03) | ((c >> 7L) & 0x3c)]|
+ des_skb[2][((c >> 13) & 0x0f) | ((c >> 14L) & 0x30)]|
+ des_skb[3][((c >> 20) & 0x01) | ((c >> 21L) & 0x06) |
+ ((c >> 22L) & 0x38)];
+ t = des_skb[4][ (d ) & 0x3f ]|
+ des_skb[5][((d >> 7L) & 0x03) | ((d >> 8L) & 0x3c)]|
+ des_skb[6][ (d >> 15L) & 0x3f ]|
+ des_skb[7][((d >> 21L) & 0x0f) | ((d >> 22L) & 0x30)];
/* table contained 0213 4657 */
- *(k++)=((t<<16L)|(s&0x0000ffffL))&0xffffffffL;
- s= ((s>>16L)|(t&0xffff0000L));
+ *(k++) = ((t << 16L) | (s & 0x0000ffffL)) & 0xffffffffL;
+ s = ((s >> 16L) | (t & 0xffff0000L));
- s=(s<<4L)|(s>>28L);
- *(k++)=s&0xffffffffL;
- }
- return(0);
- }
-
-int des_key_sched(key, schedule)
-des_cblock (*key);
-des_key_schedule schedule;
- {
- return(des_set_key(key,schedule));
+ s = (s << 4L) | (s >> 28L);
+ *(k++) = s & 0xffffffffL;
}
+ return (0);
+}
+
+int
+des_key_sched(des_cblock (*key), des_key_schedule schedule)
+{
+ return (des_set_key(key, schedule));
+}