X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=serpent.c;h=85cf4a852e4a731d46fc63e3baf852deeb5acd05;hb=8537c7a0647b533f078af9c35bce533335c7556e;hp=b2773fc220bb53cc172972d92592a7cb233f037a;hpb=64eeaf729bb29d0ca05fee5292652e8270335801;p=avr-crypto-lib.git diff --git a/serpent.c b/serpent.c index b2773fc..85cf4a8 100644 --- a/serpent.c +++ b/serpent.c @@ -170,10 +170,18 @@ static uint32_t gen_w(uint32_t * b, uint8_t i){ } /* key must be 256bit (32 byte) large! */ -void serpent_genctx(void * key, serpent_ctx_t * ctx){ +void serpent_genctx(void * key, uint8_t keysize, serpent_ctx_t * ctx){ uint32_t buffer[8]; uint8_t i,j; - memcpy(buffer, key, 32); + if(keysize){ + /* keysize is less than 256 bit, padding needed */ + memset(buffer, 0, 32); + memcpy(buffer, key, (keysize+7)/8); + ((uint8_t*)buffer)[keysize/8] |= 1<<(keysize%8); + } else { + /* keysize is 256 bit */ + memcpy(buffer, key, 32); + } for(i=0; i<33; ++i){ for(j=0; j<4; ++j){ ctx->k[i][j] = gen_w(buffer, i*4+j);