mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-08-12 15:39:27 -04:00
236 lines
8.3 KiB
C
236 lines
8.3 KiB
C
/*-
|
|
* Copyright (C) 2001-2003 by NBMK Encryption Technologies.
|
|
* All rights reserved.
|
|
*
|
|
* NBMK Encryption Technologies provides no support of any kind for
|
|
* this software. Questions or concerns about it may be addressed to
|
|
* the members of the relevant open-source community at
|
|
* <tech-crypto@netbsd.org>.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/* pke_bn.c: OPENSSL big number library wrappers and big number <-> big cache functions */
|
|
|
|
#include "n8_OS_intf.h"
|
|
#include "test_case.h"
|
|
|
|
|
|
#ifdef N8DEBUG
|
|
#define CHECKFSCANFRETURN(r,n) if ((r) != (n)){\
|
|
DBG(("error in fscanf at %d of %s, expected %d got %d\n", \
|
|
__LINE__, __FILE__,(n),(r)));\
|
|
return TC_FSCANF_ERR;}
|
|
#else
|
|
#define CHECKFSCANFRETURN(r,n) if ((r) != (n)) return TC_FSCANF_ERR;
|
|
#endif
|
|
|
|
#define CHECKREADATTRRETURN(r) if((r) != TC_SUCCESS) return (r);
|
|
|
|
|
|
int pkeFormattedReadNum(FILE *fp, int length, int offset, char *valuePtr)
|
|
{
|
|
int i, j;
|
|
int iResult;
|
|
char *tmpPtr;
|
|
unsigned int temp;
|
|
|
|
tmpPtr = valuePtr;
|
|
|
|
for (i=0; i < length; i++) {
|
|
for (j=0; j< 15; j++) {
|
|
iResult = fscanf(fp, "%2x", &temp);
|
|
CHECKFSCANFRETURN(iResult, 1);
|
|
*tmpPtr++ = (unsigned char) (temp & 0xff);
|
|
}
|
|
iResult = fscanf(fp,"%2x\n", &temp);
|
|
CHECKFSCANFRETURN(iResult, 1);
|
|
*tmpPtr++ = (unsigned char) (temp & 0xff);
|
|
}
|
|
*tmpPtr = 0;
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadAttr(FILE *fp, ATTR *thisone, char *name)
|
|
{
|
|
int r;
|
|
char fmt[16];
|
|
|
|
strcpy(fmt, name);
|
|
strcat(fmt, " %d %d\n");
|
|
r = fscanf(fp, fmt, &(thisone->length), &(thisone->offset));
|
|
CHECKFSCANFRETURN(r,2);
|
|
return pkeFormattedReadNum(fp,thisone->length,thisone->offset,thisone->value);
|
|
}
|
|
int pkeReadModm(FILE *fp, TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
|
|
}
|
|
int pkeReadRmod(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadAddm(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->b),"b"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadSubm(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->b),"b"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadAinv(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadMulm(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->b),"b"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadMinv(FILE *fp,TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadExpm(FILE *fp, TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->b),"b"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->c),"c"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadExp(FILE *fp, TEST_CASE *thisone)
|
|
{
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->m),"m"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->a),"a"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->b),"b"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->r),"r"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadRSA(FILE *fp, TEST_CASE *thisone)
|
|
{
|
|
if (fscanf(fp, "sks %d %d\n",
|
|
&(thisone->use_sks), &(thisone->sks_addr)) != 2) {
|
|
return TC_FSCANF_ERR;
|
|
}
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_P_Operand]),"p"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_Q_Operand]),"q"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_D_Operand]),"d"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_N_Operand]),"n"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_U_Operand]),"u"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_E_Operand]),"e"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[RSA_I_Operand]),"i"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int pkeReadDSA(FILE *fp, TEST_CASE *thisone)
|
|
{
|
|
if (fscanf(fp, "sks %d %d\n",
|
|
&(thisone->use_sks), &(thisone->sks_addr)) != 2) {
|
|
return TC_FSCANF_ERR;
|
|
}
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_N_Operand]),"n"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_E_Operand]),"e"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_P_Operand]),"p"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_G_Operand]),"g"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_Q_Operand]),"q"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_X_Operand]),"x"));
|
|
CHECKREADATTRRETURN(pkeReadAttr(fp,&(thisone->opnd[DSA_Y_Operand]),"y"));
|
|
return TC_SUCCESS;
|
|
}
|
|
int read_test_case(FILE *fp, TEST_CASE *thisI)
|
|
{
|
|
char *token;
|
|
int iResult;
|
|
|
|
memset(thisI, 0, sizeof(TEST_CASE));
|
|
token = (char *) &(thisI->token[0]);
|
|
|
|
iResult = fscanf(fp, "%s %d\n", (char *)&(token[0]), &(thisI->seq_number));
|
|
if(iResult != 2)
|
|
{
|
|
if(iResult == EOF) return TC_EOF;
|
|
else return TC_FSCANF_ERR;
|
|
}
|
|
if (strcmp(token,"modm") == 0)
|
|
{
|
|
return pkeReadModm(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"rmod") == 0) {
|
|
return pkeReadRmod(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"addm") == 0) {
|
|
return pkeReadAddm(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"subm") == 0) {
|
|
return pkeReadSubm(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"ainv") == 0) {
|
|
return pkeReadAinv(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"mulm") == 0) {
|
|
return pkeReadMulm(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"minv") == 0) {
|
|
return pkeReadMinv(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"expm") == 0) {
|
|
return pkeReadExpm(fp, thisI);
|
|
}
|
|
else if (strcmp(token,"exp") == 0) { /* added for performance testing 020509 MWW */
|
|
return pkeReadExp(fp, thisI);
|
|
}
|
|
else if (strcmp(token, "rsa") == 0) {
|
|
return pkeReadRSA(fp, thisI);
|
|
}
|
|
else if (strcmp(token, "dsa") == 0) {
|
|
return pkeReadDSA(fp, thisI);
|
|
}
|
|
return TC_GENERIC_ERROR;
|
|
|
|
}
|