Hi Difinity Team && Community Developers, I meet some questions when I try to use the principal id to generate secp256identity, the code as the follows:

I use the principal id as the input, then I can get an account id array, denoted as secret.

Then I use Secp256Identity.fromSecretKey() to generate identity, it works, but there is a problem:

When I use the new identity to call getPrincipal(), the result is different from the input principal id, I don’t know why

export const fromHexString = (hexString: string) => {

return Uint8Array.from(Buffer.from(hexString, ‘base64’));

}

export const getAidArrByPid = (pid: Principal) => {

let aid = getAccountId(pid, SUB_ACCOUNT_ZERO);

let aidArr = Uint8Array.from(fromHexString(aid));

return aidArr;

}

let identity1 = Secp256k1KeyIdentity.fromSecretKey(aidArr);

A principal is basically an encoded public key. If I understand correctly what you’re trying to do, then you’re trying to generate the private key from a principal. This is not possible. If it were, public key cryptography as we know it would break.

You have to start with a private key, which you can then load into a Secp256k1 identity, which can then display its public key in the form of its principal. From that you can then derive the account id.

1 Like

Thx, you’re right, I’m trying to generate the private key from a principal.

So, it only can generate a secp256identity from a secret key.

And thank you again

1 Like