MYPublicKey.h
author snej@snej-mbp.mtv.corp.google.com
Wed Apr 08 16:30:52 2009 -0700 (2009-04-08)
changeset 3 1dfe820d7ebe
parent 1 60e4cbbb5128
child 13 6fd9177eb6da
permissions -rw-r--r--
* Replaced MYKeyPair with MYPrivateKey.
* Changed config files.
     1 //
     2 //  MYPublicKey.h
     3 //  MYCrypto
     4 //
     5 //  Created by Jens Alfke on 3/25/09.
     6 //  Copyright 2009 Jens Alfke. All rights reserved.
     7 //
     8 
     9 #import "MYKey.h"
    10 @class MYSHA1Digest;
    11 
    12 #if !TARGET_OS_IPHONE
    13 #import <Security/SecKey.h>
    14 #endif
    15 
    16 
    17 /** A public key, which can be used for encrypting data and verifying signatures.
    18     MYPublicKeys are created as part of generating a key-pair, 
    19     or by being imported from data into a MYKeychain. */
    20 @interface MYPublicKey : MYKey <MYEncryption>
    21 {
    22     @private
    23     MYSHA1Digest *_digest;
    24 }
    25 
    26 /** The public key's SHA-1 digest. This is a convenient short (20-byte) identifier for the key. */
    27 @property (readonly) MYSHA1Digest *publicKeyDigest;
    28 
    29 /** Encrypts a short piece of data using this key, returning the raw encrypted result.
    30     An RSA key can encrypt only blocks smaller than its own key size; this
    31     method will fail and return nil if the data is too long.
    32     RSA encryption is also much slower than regular symmetric-key encryption, so the correct
    33     way to encrypt a large block of data using a public key is to first generate a random
    34     symmetric key, called the "session key" (using a Cryptor), encrypt that session key with the 
    35     public key, and then encrypt your data with the session key. Send the encrypted session key
    36     and the encrypted data. */
    37 - (NSData*) encryptData: (NSData*)data;
    38 
    39 /** Verifies the signature of a block of data. If the result is YES, you can be assured that
    40     the signature was generated from the data by using this key's matching private key.
    41     If the result is NO, something is wrong: either the data or the signature was modified,
    42     or the signature was generated by a different private key.
    43     (What's actually verified using RSA is the SHA-256 digest of the data.) */
    44 - (BOOL) verifySignature: (NSData*)signature ofData: (NSData*)data;
    45     
    46 @end