I am trying to port this Javascript code to Golang, but received this decryption error
I am using ParsePKCS8PrivateKey
when I am perform same in Javascript decoding is working fine, but failing in Golang
encryptedKey, err := base64.StdEncoding.DecodeString(base64encodedKey)
if err != nil {
log.Fatalf("Failed to decode base64 string: %v", err)
}
// Parse the PEM-encoded private key
block, _ := pem.Decode([]byte(privateKeyPEM))
if block == nil || block.Type != "PRIVATE KEY" {
log.Fatalf("Failed to decode PEM block containing private key")
}
// Parse the private key
privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
log.Fatalf("Failed to parse private key: %v", err)
}
// Perform RSA decryption
rsaPrivateKey := privateKey.(*rsa.PrivateKey)
decryptedKey, err := rsa.DecryptOAEP(sha256.New(), nil, rsaPrivateKey, encryptedKey, nil)
if err != nil {
log.Fatalf("Failed to decrypt AES key: %v", err)
}
const base64encodedKey = 'base 64 encoded dataKey value';
const asymetricPrivateKey = 'pem encoded private key';
const decodedKey = Buffer.from(base64encodedKey, 'base64');
const decryptedSymetricKey = crypto.privateDecrypt(asymetricPrivateKey, decodedKey);
// Can now use decryptedSymmetricKey with the AES algorithm.
const decryptedSymetricKey = []; //Buffer provided by previous step
const base64encodedSignature = 'base64 encodded value from the dataSignature property';
const hmac = crypto.createHmac('sha256', decryptedSymetricKey);
hmac.write(base64encodedPayload, 'base64');
if(base64encodedSignature === hmac.digest('base64'))
{
// Continue with decryption of the encryptedPayload.
}
else
{
// Do not attempt to decrypt encryptedPayload. Assume notification payload has been tampered with and investigate.
}
const base64encodedPayload = 'base64 encoded value from data property';
const decryptedSymetricKey = []; //Buffer provided by previous step
const iv = Buffer.alloc(16, 0);
decryptedSymetricKey.copy(iv, 0, 0, 16);
const decipher = crypto.createDecipheriv('aes-256-cbc', decryptedSymetricKey, iv);
let decryptedPayload = decipher.update(base64encodedPayload, 'base64', 'utf8');
decryptedPayload += decipher.final('utf8');
Decrypting the encrypted data using private key and symmetric key