summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
af43f0b)
Provide an ad-hoc debugging facility in serpent.c.
If the "#if 0" is changed to "#if 1", the key material, plaintext and
ciphertext of all Serpent operations is printed in hex to stderr.
We provide a new header file hexdebug.h to facilitate this. And we
use this new header file in the "#if 0" debugging in transform_setkey.
No functional change.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
--- /dev/null
+#ifndef HEXDEBUG_H
+#define HEXDEBUG_H
+
+#include <stdio.h>
+#include <sys/types.h>
+
+static inline void hexdebug(FILE *file, const void *buffer, size_t len)
+{
+ const uint8_t *array=buffer;
+ size_t i;
+ for (i=0; i<len; i++)
+ fprintf(file,"%02x",array[i]);
+}
+
+#endif /*HEXDEBUG_H*/
#include "serpent.h"
#include "serpentsboxes.h"
#include "serpent.h"
#include "serpentsboxes.h"
#endif /* !defined(SERPENT_BIGENDIAN) */
#endif /* !defined(SERPENT_BIGENDIAN) */
+#if 0
+
+#include <stdio.h>
+
+static void SERP_DEBUG(const char *str1,
+ const void *ary, int sz,
+ const char *str2)
+{
+ fprintf(stderr,"%s",str1);
+ hexdebug(stderr,ary,sz);
+ fprintf(stderr,"%s",str2);
+}
+
+#else
+
+#define SERP_DEBUG(str1,aryv,sz,str2) /*empty*/
+
+#endif
+
+
static uint32_t serpent_get_32bit(const uint8_t *basep,
int lenbytes, int offset)
{
static uint32_t serpent_get_32bit(const uint8_t *basep,
int lenbytes, int offset)
{
uint32_t j;
uint32_t w[132],k[132];
uint32_t j;
uint32_t w[132],k[132];
+ SERP_DEBUG("SERPENT makekey ",keyMaterial,keyLen/8,"\n");
+
for(i=0; i<keyLen/32; i++)
w[i]=serpent_get_32bit(keyMaterial, keyLen/8, i*4);
if(keyLen<256)
for(i=0; i<keyLen/32; i++)
w[i]=serpent_get_32bit(keyMaterial, keyLen/8, i*4);
if(keyLen<256)
register uint32_t x0, x1, x2, x3;
register uint32_t y0, y1, y2, y3;
register uint32_t x0, x1, x2, x3;
register uint32_t y0, y1, y2, y3;
+ SERP_DEBUG("SERPENT encrypt ",plaintext,16," ->");
+
x0=serpent_get_32bit(plaintext,16,+0);
x1=serpent_get_32bit(plaintext,16,+4);
x2=serpent_get_32bit(plaintext,16,+8);
x0=serpent_get_32bit(plaintext,16,+0);
x1=serpent_get_32bit(plaintext,16,+4);
x2=serpent_get_32bit(plaintext,16,+8);
serpent_put_32bit(ciphertext,16,+4, x1);
serpent_put_32bit(ciphertext,16,+8, x2);
serpent_put_32bit(ciphertext,16,12, x3);
serpent_put_32bit(ciphertext,16,+4, x1);
serpent_put_32bit(ciphertext,16,+8, x2);
serpent_put_32bit(ciphertext,16,12, x3);
+
+ SERP_DEBUG(" ",ciphertext,16,"\n");
}
void SERPENT_DECORATE(decrypt)(struct keyInstance *key,
}
void SERPENT_DECORATE(decrypt)(struct keyInstance *key,
register uint32_t x0, x1, x2, x3;
register uint32_t y0, y1, y2, y3;
register uint32_t x0, x1, x2, x3;
register uint32_t y0, y1, y2, y3;
+ SERP_DEBUG("SERPENT decrypt ",ciphertext,16," ->");
+
x0=serpent_get_32bit(ciphertext,16,+0);
x1=serpent_get_32bit(ciphertext,16,+4);
x2=serpent_get_32bit(ciphertext,16,+8);
x0=serpent_get_32bit(ciphertext,16,+0);
x1=serpent_get_32bit(ciphertext,16,+4);
x2=serpent_get_32bit(ciphertext,16,+8);
serpent_put_32bit(plaintext,16,+4, x1);
serpent_put_32bit(plaintext,16,+8, x2);
serpent_put_32bit(plaintext,16,12, x3);
serpent_put_32bit(plaintext,16,+4, x1);
serpent_put_32bit(plaintext,16,+8, x2);
serpent_put_32bit(plaintext,16,12, x3);
+
+ SERP_DEBUG(" ",plaintext,16,"\n");
#include "util.h"
#include "serpent.h"
#include "unaligned.h"
#include "util.h"
#include "serpent.h"
#include "unaligned.h"
/* Required key length in bytes */
#define REQUIRED_KEYLEN ((512+64+32)/8)
/* Required key length in bytes */
#define REQUIRED_KEYLEN ((512+64+32)/8)
printf("Setting key to: ");
printf("Setting key to: ");
- for (i=0; i<keylen; i++)
- printf("%02x",key[i]);
+ hexdebug(stdout,key,keylen);
printf("\n");
}
#endif /* 0 */
printf("\n");
}
#endif /* 0 */