summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhshoexer <>2004-02-13 10:05:44 +0000
committerhshoexer <>2004-02-13 10:05:44 +0000
commit1617c4271e2064de608b1d25e4d8b49ea0b00007 (patch)
tree43b0daa1c67f3741165f9daf7852ed118370b9ba
parent890ac6c07f8f31aa4c90f8eb9b5c2eab59c8c7e6 (diff)
downloadopenbsd-1617c4271e2064de608b1d25e4d8b49ea0b00007.tar.gz
openbsd-1617c4271e2064de608b1d25e4d8b49ea0b00007.tar.bz2
openbsd-1617c4271e2064de608b1d25e4d8b49ea0b00007.zip
Cleanup and shrink ACSS_KEY a bit. Thus crank library minor.
Change cipher modes to more generic names and add an additional mode. ok deraadt@ markus@
-rw-r--r--src/lib/libcrypto/acss/acss.h13
-rw-r--r--src/lib/libcrypto/acss/acss_enc.c26
-rw-r--r--src/lib/libcrypto/evp/e_acss.c4
-rw-r--r--src/lib/libssl/crypto/shlib_version2
-rw-r--r--src/lib/libssl/src/crypto/acss/acss.h13
-rw-r--r--src/lib/libssl/src/crypto/acss/acss_enc.c26
-rw-r--r--src/lib/libssl/src/crypto/evp/e_acss.c4
7 files changed, 49 insertions, 39 deletions
diff --git a/src/lib/libcrypto/acss/acss.h b/src/lib/libcrypto/acss/acss.h
index 2e33c78837..476339fb9e 100644
--- a/src/lib/libcrypto/acss/acss.h
+++ b/src/lib/libcrypto/acss/acss.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: acss.h,v 1.2 2004/01/23 19:23:33 hshoexer Exp $ */ 1/* $OpenBSD: acss.h,v 1.3 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -26,10 +26,10 @@
26#define ACSS_KEYSIZE 5 26#define ACSS_KEYSIZE 5
27 27
28/* modes of acss */ 28/* modes of acss */
29#define ACSS_AUTHENTICATE 0 29#define ACSS_MODE0 0
30#define ACSS_SESSIONKEY 1 30#define ACSS_MODE1 1
31#define ACSS_TITLEKEY 2 31#define ACSS_MODE2 2
32#define ACSS_DATA 3 32#define ACSS_MODE3 3
33 33
34typedef struct acss_key_st { 34typedef struct acss_key_st {
35 unsigned int lfsr17; /* current state of lfsrs */ 35 unsigned int lfsr17; /* current state of lfsrs */
@@ -37,9 +37,8 @@ typedef struct acss_key_st {
37 unsigned int lfsrsum; 37 unsigned int lfsrsum;
38 unsigned char seed[ACSS_KEYSIZE]; 38 unsigned char seed[ACSS_KEYSIZE];
39 unsigned char data[ACSS_KEYSIZE]; 39 unsigned char data[ACSS_KEYSIZE];
40 int encrypt; /* XXX make these bit flags? */ 40 int encrypt;
41 int mode; 41 int mode;
42 int seeded;
43} ACSS_KEY; 42} ACSS_KEY;
44 43
45void acss_setkey(ACSS_KEY *, const unsigned char *, int, int); 44void acss_setkey(ACSS_KEY *, const unsigned char *, int, int);
diff --git a/src/lib/libcrypto/acss/acss_enc.c b/src/lib/libcrypto/acss/acss_enc.c
index 9278af3578..829830bc54 100644
--- a/src/lib/libcrypto/acss/acss_enc.c
+++ b/src/lib/libcrypto/acss/acss_enc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: acss_enc.c,v 1.3 2004/01/23 19:23:33 hshoexer Exp $ */ 1/* $OpenBSD: acss_enc.c,v 1.4 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -95,7 +95,7 @@ static unsigned char sboxenc[] = {
95 * lfsr17: polynomial of degree 17, primitive modulo 2 (listed in Schneier) 95 * lfsr17: polynomial of degree 17, primitive modulo 2 (listed in Schneier)
96 * x^15 + x + 1 96 * x^15 + x + 1
97 * lfsr25: polynomial of degree 25, not know if primitive modulo 2 97 * lfsr25: polynomial of degree 25, not know if primitive modulo 2
98 * x^13 + x^5 + x^4 + x^1 + 1 98 * x^13 + x^5 + x^4 + x + 1
99 * 99 *
100 * Output bits are discarded, instead the feedback bits are added to produce 100 * Output bits are discarded, instead the feedback bits are added to produce
101 * the cipher stream. Depending on the mode, feedback bytes may be inverted 101 * the cipher stream. Depending on the mode, feedback bytes may be inverted
@@ -145,24 +145,30 @@ acss(ACSS_KEY *key, unsigned long len, const unsigned char *in,
145 145
146 /* addition */ 146 /* addition */
147 switch (key->mode) { 147 switch (key->mode) {
148 case ACSS_SESSIONKEY: 148 case ACSS_MODE3:
149 key->lfsrsum = key->lfsr17 >> 9; 149 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9);
150 key->lfsrsum += key->lfsr25 >> 17; 150 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17);
151 break; 151 break;
152 case ACSS_TITLEKEY: 152 case ACSS_MODE2:
153 key->lfsrsum = key->lfsr17 >> 9; 153 key->lfsrsum = key->lfsr17 >> 9;
154 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17); 154 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17);
155 break; 155 break;
156 case ACSS_AUTHENTICATE: 156 case ACSS_MODE1:
157 case ACSS_DATA:
158 default:
159 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9); 157 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9);
160 key->lfsrsum += key->lfsr25 >> 17; 158 key->lfsrsum += key->lfsr25 >> 17;
161 break; 159 break;
160 case ACSS_MODE0:
161 default:
162 key->lfsrsum = key->lfsr17 >> 9;
163 key->lfsrsum += key->lfsr25 >> 17;
164 break;
162 } 165 }
163 key->lfsrsum += (lfsrsumtmp >> 8); 166 key->lfsrsum += (lfsrsumtmp >> 8);
164 167
165 if (key->encrypt) { 168 if (in == (unsigned char *)0)
169 /* generate only a keystream */
170 out[i] = key->lfsrsum & 0xff;
171 else if (key->encrypt) {
166 out[i] = sboxenc[(in[i] ^ key->lfsrsum) & 0xff]; 172 out[i] = sboxenc[(in[i] ^ key->lfsrsum) & 0xff];
167 } else { 173 } else {
168 out[i] = (sboxdec[in[i]] ^ key->lfsrsum) & 0xff; 174 out[i] = (sboxdec[in[i]] ^ key->lfsrsum) & 0xff;
diff --git a/src/lib/libcrypto/evp/e_acss.c b/src/lib/libcrypto/evp/e_acss.c
index f4e55f1030..a16b85c627 100644
--- a/src/lib/libcrypto/evp/e_acss.c
+++ b/src/lib/libcrypto/evp/e_acss.c
@@ -1,4 +1,4 @@
1/* $Id: e_acss.c,v 1.1 2004/01/23 16:58:43 hshoexer Exp $ */ 1/* $Id: e_acss.c,v 1.2 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -58,7 +58,7 @@ static int
58acss_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 58acss_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
59 const unsigned char *iv, int enc) 59 const unsigned char *iv, int enc)
60{ 60{
61 acss_setkey(&data(ctx)->ks,key,enc,ACSS_DATA); 61 acss_setkey(&data(ctx)->ks,key,enc,ACSS_MODE1);
62 return 1; 62 return 1;
63} 63}
64 64
diff --git a/src/lib/libssl/crypto/shlib_version b/src/lib/libssl/crypto/shlib_version
index bab3bd7a1b..c6fa1d0271 100644
--- a/src/lib/libssl/crypto/shlib_version
+++ b/src/lib/libssl/crypto/shlib_version
@@ -1,2 +1,2 @@
1major=10 1major=10
2minor=2 2minor=3
diff --git a/src/lib/libssl/src/crypto/acss/acss.h b/src/lib/libssl/src/crypto/acss/acss.h
index 2e33c78837..476339fb9e 100644
--- a/src/lib/libssl/src/crypto/acss/acss.h
+++ b/src/lib/libssl/src/crypto/acss/acss.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: acss.h,v 1.2 2004/01/23 19:23:33 hshoexer Exp $ */ 1/* $OpenBSD: acss.h,v 1.3 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -26,10 +26,10 @@
26#define ACSS_KEYSIZE 5 26#define ACSS_KEYSIZE 5
27 27
28/* modes of acss */ 28/* modes of acss */
29#define ACSS_AUTHENTICATE 0 29#define ACSS_MODE0 0
30#define ACSS_SESSIONKEY 1 30#define ACSS_MODE1 1
31#define ACSS_TITLEKEY 2 31#define ACSS_MODE2 2
32#define ACSS_DATA 3 32#define ACSS_MODE3 3
33 33
34typedef struct acss_key_st { 34typedef struct acss_key_st {
35 unsigned int lfsr17; /* current state of lfsrs */ 35 unsigned int lfsr17; /* current state of lfsrs */
@@ -37,9 +37,8 @@ typedef struct acss_key_st {
37 unsigned int lfsrsum; 37 unsigned int lfsrsum;
38 unsigned char seed[ACSS_KEYSIZE]; 38 unsigned char seed[ACSS_KEYSIZE];
39 unsigned char data[ACSS_KEYSIZE]; 39 unsigned char data[ACSS_KEYSIZE];
40 int encrypt; /* XXX make these bit flags? */ 40 int encrypt;
41 int mode; 41 int mode;
42 int seeded;
43} ACSS_KEY; 42} ACSS_KEY;
44 43
45void acss_setkey(ACSS_KEY *, const unsigned char *, int, int); 44void acss_setkey(ACSS_KEY *, const unsigned char *, int, int);
diff --git a/src/lib/libssl/src/crypto/acss/acss_enc.c b/src/lib/libssl/src/crypto/acss/acss_enc.c
index 9278af3578..829830bc54 100644
--- a/src/lib/libssl/src/crypto/acss/acss_enc.c
+++ b/src/lib/libssl/src/crypto/acss/acss_enc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: acss_enc.c,v 1.3 2004/01/23 19:23:33 hshoexer Exp $ */ 1/* $OpenBSD: acss_enc.c,v 1.4 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -95,7 +95,7 @@ static unsigned char sboxenc[] = {
95 * lfsr17: polynomial of degree 17, primitive modulo 2 (listed in Schneier) 95 * lfsr17: polynomial of degree 17, primitive modulo 2 (listed in Schneier)
96 * x^15 + x + 1 96 * x^15 + x + 1
97 * lfsr25: polynomial of degree 25, not know if primitive modulo 2 97 * lfsr25: polynomial of degree 25, not know if primitive modulo 2
98 * x^13 + x^5 + x^4 + x^1 + 1 98 * x^13 + x^5 + x^4 + x + 1
99 * 99 *
100 * Output bits are discarded, instead the feedback bits are added to produce 100 * Output bits are discarded, instead the feedback bits are added to produce
101 * the cipher stream. Depending on the mode, feedback bytes may be inverted 101 * the cipher stream. Depending on the mode, feedback bytes may be inverted
@@ -145,24 +145,30 @@ acss(ACSS_KEY *key, unsigned long len, const unsigned char *in,
145 145
146 /* addition */ 146 /* addition */
147 switch (key->mode) { 147 switch (key->mode) {
148 case ACSS_SESSIONKEY: 148 case ACSS_MODE3:
149 key->lfsrsum = key->lfsr17 >> 9; 149 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9);
150 key->lfsrsum += key->lfsr25 >> 17; 150 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17);
151 break; 151 break;
152 case ACSS_TITLEKEY: 152 case ACSS_MODE2:
153 key->lfsrsum = key->lfsr17 >> 9; 153 key->lfsrsum = key->lfsr17 >> 9;
154 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17); 154 key->lfsrsum += 0xff & ~(key->lfsr25 >> 17);
155 break; 155 break;
156 case ACSS_AUTHENTICATE: 156 case ACSS_MODE1:
157 case ACSS_DATA:
158 default:
159 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9); 157 key->lfsrsum = 0xff & ~(key->lfsr17 >> 9);
160 key->lfsrsum += key->lfsr25 >> 17; 158 key->lfsrsum += key->lfsr25 >> 17;
161 break; 159 break;
160 case ACSS_MODE0:
161 default:
162 key->lfsrsum = key->lfsr17 >> 9;
163 key->lfsrsum += key->lfsr25 >> 17;
164 break;
162 } 165 }
163 key->lfsrsum += (lfsrsumtmp >> 8); 166 key->lfsrsum += (lfsrsumtmp >> 8);
164 167
165 if (key->encrypt) { 168 if (in == (unsigned char *)0)
169 /* generate only a keystream */
170 out[i] = key->lfsrsum & 0xff;
171 else if (key->encrypt) {
166 out[i] = sboxenc[(in[i] ^ key->lfsrsum) & 0xff]; 172 out[i] = sboxenc[(in[i] ^ key->lfsrsum) & 0xff];
167 } else { 173 } else {
168 out[i] = (sboxdec[in[i]] ^ key->lfsrsum) & 0xff; 174 out[i] = (sboxdec[in[i]] ^ key->lfsrsum) & 0xff;
diff --git a/src/lib/libssl/src/crypto/evp/e_acss.c b/src/lib/libssl/src/crypto/evp/e_acss.c
index f4e55f1030..a16b85c627 100644
--- a/src/lib/libssl/src/crypto/evp/e_acss.c
+++ b/src/lib/libssl/src/crypto/evp/e_acss.c
@@ -1,4 +1,4 @@
1/* $Id: e_acss.c,v 1.1 2004/01/23 16:58:43 hshoexer Exp $ */ 1/* $Id: e_acss.c,v 1.2 2004/02/13 10:05:44 hshoexer Exp $ */
2/* 2/*
3 * Copyright (c) 2004 The OpenBSD project 3 * Copyright (c) 2004 The OpenBSD project
4 * 4 *
@@ -58,7 +58,7 @@ static int
58acss_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 58acss_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
59 const unsigned char *iv, int enc) 59 const unsigned char *iv, int enc)
60{ 60{
61 acss_setkey(&data(ctx)->ks,key,enc,ACSS_DATA); 61 acss_setkey(&data(ctx)->ks,key,enc,ACSS_MODE1);
62 return 1; 62 return 1;
63} 63}
64 64