OSDN Git Service

keystore: compute the padding in an intuitive way.
authorChia-chi Yeh <chiachi@android.com>
Wed, 30 Dec 2009 02:38:39 +0000 (10:38 +0800)
committerChia-chi Yeh <chiachi@android.com>
Wed, 30 Dec 2009 02:38:39 +0000 (10:38 +0800)
cmds/keystore/keystore.c

index 37155e4..4426874 100644 (file)
@@ -170,16 +170,12 @@ static int8_t encrypt_blob(char *name, AES_KEY *aes_key)
         return SYSTEM_ERROR;
     }
 
-    length = (blob.length + blob.value - blob.encrypted) % AES_BLOCK_SIZE;
-    if (length) {
-        length = AES_BLOCK_SIZE - length;
-    }
+    length = blob.length + blob.value - blob.encrypted;
+    length = (length + AES_BLOCK_SIZE - 1) / AES_BLOCK_SIZE * AES_BLOCK_SIZE;
 
-    length += blob.length + blob.value - blob.digested;
     blob.length = htonl(blob.length);
-    MD5(blob.digested, length, blob.digest);
+    MD5(blob.digested, length - (blob.digested - blob.encrypted), blob.digest);
 
-    length += blob.digested - blob.encrypted;
     memcpy(vector, blob.vector, AES_BLOCK_SIZE);
     AES_cbc_encrypt(blob.encrypted, blob.encrypted, length, aes_key, vector,
                     AES_ENCRYPT);