1 #import "keychain/TrustedPeersHelper/TPHObjcTranslation.h"
3 #import <Security/SecKey.h>
4 #import <Security/SecKeyPriv.h>
6 #import <SecurityFoundation/SFKey.h>
7 #import <SecurityFoundation/SFKey_Private.h>
8 #import <corecrypto/ccsha2.h>
9 #import <corecrypto/ccrng.h>
11 @implementation TPHObjectiveC : NSObject
13 + (SFECKeyPair* _Nullable)fetchKeyPairWithPrivateKeyPersistentRef:(NSData *)persistentRef error:(NSError**)error
15 SecKeyRef seckey = NULL;
16 OSStatus status = SecKeyFindWithPersistentRef((__bridge CFDataRef)persistentRef, &seckey);
20 *error = [NSError errorWithDomain:NSOSStatusErrorDomain
27 return [[SFECKeyPair alloc] initWithSecKey: seckey];
30 + (ccec_full_ctx_t)ccec384Context
32 ccec_const_cp_t cp = ccec_cp_384();
33 size_t size = ccec_full_ctx_size(ccec_ccn_size(cp));
34 ccec_full_ctx_t heapContext = (ccec_full_ctx_t)malloc(size);
35 ccec_ctx_init(cp, heapContext);
39 + (void)contextFree:(void*) context
44 + (size_t) ccsha384_diSize{
45 return ccsha384_di()->output_size;
48 + (SFAESKeyBitSize)aes256BitSize{
49 return SFAESKeyBitSize256;
52 + (NSString*)digestUsingSha384:(NSData*) data {
53 const struct ccdigest_info *di = ccsha384_di();
54 NSMutableData* result = [[NSMutableData alloc] initWithLength:ccsha384_di()->output_size];
56 ccdigest(di, [data length], [data bytes], [result mutableBytes]);
58 return [result base64EncodedStringWithOptions:0];