From ec5d5e399ff69a29e2a7d0736ad214019fec4087 Mon Sep 17 00:00:00 2001 From: dangfan Date: Wed, 21 Apr 2021 19:09:35 +0800 Subject: [PATCH] add more documentation of decryptSessionKeyEcdh --- .../keychain/securitytoken/operations/PsoDecryptTokenOp.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/operations/PsoDecryptTokenOp.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/operations/PsoDecryptTokenOp.java index 649211493..bbf975557 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/operations/PsoDecryptTokenOp.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/operations/PsoDecryptTokenOp.java @@ -164,7 +164,10 @@ public class PsoDecryptTokenOp { /* From rfc6637#section-7 : The input of KDF should be the x portion of the point. As the result of ECDH can be expressed in two formats: compressed and uncompressed, - we have to deal with each case. + we have to deal with each case: + An uncompressed point is encoded as 04 || x || y, with x and y are of the same size. + However, a valid x may be led with 04, so we have to also check the length of the result. + A compressed point, on the other hand, is encoded as x only. Therefore, we use the value directly. */ int xLen, startPos; if (keyEncryptionKey[0] == 0x04 && keyEncryptionKey.length % 2 == 1) {