/* cook up a Binary key */ void BSafe::BSafeKeyInfoProvider::CssmKeyToBinary( CssmKey *paramKey, // optional, ignored CSSM_KEYATTR_FLAGS &attrFlags, // IN/OUT BinaryKey **binKey) { *binKey = NULL; const CSSM_KEYHEADER *hdr = &mKey.KeyHeader; assert(hdr->BlobType == CSSM_KEYBLOB_RAW); B_INFO_TYPE bsType; CSSM_KEYBLOB_FORMAT format; bool isPub; switch(hdr->KeyClass) { case CSSM_KEYCLASS_PUBLIC_KEY: isPub = true; break; case CSSM_KEYCLASS_PRIVATE_KEY: isPub = false; break; default: // someone else's key CssmError::throwMe(CSSMERR_CSP_INVALID_KEY_CLASS); } if(!bsafeAlgToInfoType(hdr->AlgorithmId, isPub, bsType, format)) { // someone else's key CssmError::throwMe(CSSMERR_CSP_INVALID_ALGORITHM); } if(hdr->Format != format) { dprintf0("BSafe::cssmKeyToBinary: format mismatch\n"); CssmError::throwMe(CSSMERR_CSP_INVALID_KEY_FORMAT); } BSafeBinaryKey *bsBinKey = new BSafeBinaryKey(isPub, hdr->AlgorithmId); // set up key material as appropriate if(format == CSSM_KEYBLOB_RAW_FORMAT_PKCS1) { /* special case, decode the PKCS1 format blob */ BS_setKeyPkcs1(mKey, bsBinKey->bsKey()); } else { /* normal case, use key blob as is */ BSafeItem item(mKey.KeyData); BSafe::check( B_SetKeyInfo(bsBinKey->bsKey(), bsType, POINTER(&item)), true); } *binKey = bsBinKey; }
/* read PLN weights text file. Instead of reading from text file, the values can be directly coded into the structure */ void readPlnWeights(char *fname, struct PlnWeights *pln) { int cnt = 0; int n, m, k; FILE *fp = NULL; fp = fopen(fname, "r"); if(!fp) { printf("Unable to open file to load PLN.\n"); exit(0); } cnt = fscanf(fp, "PLN\n"); cnt = fscanf(fp, "K\n%d\n", &pln->Nc); cnt = fscanf(fp, "N\n%d\n", &pln->N); cnt = fscanf(fp, "M\n%d\n", &pln->M); pln->distanceMeasure = mallocArray(pln->N); cnt = fscanf(fp, "DistanceMeasure\n"); dprintf0("DistanceMeasure\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->distanceMeasure[n]); dprintf("%e ", pln->distanceMeasure[n]); } dprintf0("\n"); pln->inputMeans = mallocArray(pln->N); cnt = fscanf(fp, "InputMeans\n"); dprintf0("InputMeans\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->inputMeans[n]); dprintf("%e ", pln->inputMeans[n]); } dprintf0("\n"); pln->inputStd = mallocArray(pln->N); cnt = fscanf(fp, "InputStd\n"); dprintf0("InputStd\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->inputStd[n]); dprintf("%e ", pln->inputStd[n]); } dprintf0("\n"); pln->Nv = (int*)malloc(pln->Nc*sizeof(int)); pln->clusterCenters = mallocMatrix(pln->Nc, pln->N); pln->R = (double***)malloc(pln->Nc*sizeof(double**)); pln->C = (double***)malloc(pln->Nc*sizeof(double**)); pln->W = (double***)malloc(pln->Nc*sizeof(double**)); pln->Et = mallocMatrix(pln->Nc, pln->M); pln->lambda = mallocArray(pln->Nc); for(k=0; k<pln->Nc; k++) { int idx; cnt = fscanf(fp, "ClusterIndex\n%d\n", &idx); dprintf("Reading cluster %d\n", idx); if(k!=idx) { printf("Invalid file.\n"); exit(0); } cnt = fscanf(fp, "Nv\n%d\n", &pln->Nv[k]); dprintf("Nv = %d\n", pln->Nv[k]); cnt = fscanf(fp, "CenterVector\n"); dprintf0("CenterVector\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->clusterCenters[k][n]); dprintf("%e ", pln->clusterCenters[k][n]); } cnt = fscanf(fp, "\n"); dprintf0("\n"); pln->R[k] = mallocMatrix(pln->N+1, pln->N+1); dprintf0("R\n"); cnt = fscanf(fp, "R\n"); for(n=0; n<pln->N+1; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->R[k][n][m]); dprintf("%e ", pln->R[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); pln->C[k] = mallocMatrix(pln->M, pln->N+1); cnt = fscanf(fp, "C\n"); dprintf0("C\n"); for(n=0; n<pln->M; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->C[k][n][m]); dprintf("%e ", pln->C[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); pln->W[k] = mallocMatrix(pln->M, pln->N+1); cnt = fscanf(fp, "W\n"); dprintf0("W\n"); for(n=0; n<pln->M; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->W[k][n][m]); dprintf("%e ", pln->W[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); cnt = fscanf(fp, "Et\n"); dprintf0("Et\n"); for(n=0; n<pln->M; n++) { cnt = fscanf(fp, "%lf ", &pln->Et[k][n]); dprintf("%e ", pln->Et[k][n]); } cnt = fscanf(fp, "\n"); dprintf0("\n"); cnt = fscanf(fp, "lambda\n%lf\n", &pln->lambda[k]); dprintf("lambda\n%lf\n", pln->lambda[k]); } cnt = fscanf(fp, "EOF\n"); fclose(fp); }