openssl解析國密X509證書,把公鑰拿出來重寫一下就行了
x = strToX509(pbCert, pulCertLen);
dwRet = getCertPubKey(x, &pRSAPubKeyBlob, &pECCPubKeyBlob);
ECCPUBLICKEYBLOB pec = { 0 };//目標公鑰
pec.BitLen = 256;
int i = 0;
for (i = 0; i < 64; i++){
if (i <= 31){
pec.XCoordinate[i] = 0;
pec.YCoordinate[i] = 0;
}
else{
pec.XCoordinate[i] = pECCPubKeyBlob.XCoordinate[i - 32];
pec.YCoordinate[i] = pECCPubKeyBlob.YCoordinate[i - 32];
}
}
其實就是公鑰結構解析的問題,SM2公鑰所需要的格式和X509解析出來的X,Y位置是顛倒的,要求的結果是X,Y數組前32為0;而X509提供的為后32為0,正好顛倒了。