|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1238 (0x4d6)
Types: TextFile
Notes: UNIX file
Names: »pkio.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »cmd/knapsack/pkio.c«
/*
* These routines write and read public key elements. The stream f is assumed
* to be open in an appropriate mode and positioned appropriately. One element
* is written/read at a time.
* Elements are stored in a base 256 format, least significant digit first.
* Always, PKCL (see knapsack.h) digits are stored per element.
* Its easiest to do the input via fread and output via successive putc's.
*/
#include <stdio.h>
#include "knapsack.h"
typedef unsigned char Uchar;
static mint t; /* temporary */
static mint m256; /* Mint to hold value 256. */
static int buf[PKCL]; /* Must be int for sdiv in pkout. */
pkin(m, f)
register mint *m;
FILE *f;
{
register Uchar *cp;
mitom(256, &m256);
mitom(0, m);
if (fread((Uchar *)buf, 1, PKCL, f) != PKCL) {
fprintf(stderr, "Public key data corrupted.\n");
exit(1);
}
for (cp = ((Uchar*)buf) + PKCL - 1; cp >= ((Uchar*)buf); --cp) {
mult(m, &m256, m);
mitom(*cp, &t);
madd(m, &t, m);
}
return;
}
pkout(m, f)
mint *m;
register FILE *f;
{
int a;
int b;
register int i;
mcopy(m, &t);
for (i = PKCL; i > 0; --i) {
/* Doing the divide this way is faster than using mdiv */
sdiv(&t, 16, &t, &b);
sdiv(&t, 16, &t, &a);
putc(b + 16 * a, f);
}
return;
}