/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleObjCpp
 *
 * We create an umbrella header (and corresponding implementation) here since
 * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
 * must have a single output. More files => more genrule()s => slower builds.
 */

#ifndef __cplusplus
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
#endif

// Avoid multiple includes of RNEncryptionSpec symbols
#ifndef RNEncryptionSpec_H
#define RNEncryptionSpec_H

#import <Foundation/Foundation.h>
#import <RCTRequired/RCTRequired.h>
#import <RCTTypeSafety/RCTConvertHelpers.h>
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTCxxConvert.h>
#import <React/RCTManagedPointer.h>
#import <ReactCommon/RCTTurboModule.h>
#import <optional>
#import <vector>


@protocol NativeEncryptionSpec <RCTBridgeModule, RCTTurboModule>

- (NSString *)generateAESKey:(double)keySize;
- (NSString *)encryptAES:(NSString *)data
                     key:(NSString *)key;
- (NSString *)decryptAES:(NSString *)data
                     key:(NSString *)key;
- (void)encryptFile:(NSString *)inputPath
         outputPath:(NSString *)outputPath
                key:(NSString *)key
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)decryptFile:(NSString *)inputPath
                key:(NSString *)key
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)encryptAsyncAES:(NSString *)data
                    key:(NSString *)key
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;
- (void)decryptAsyncAES:(NSString *)data
                    key:(NSString *)key
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;
- (NSDictionary *)generateRSAKeyPair;
- (NSString *)getPublicRSAkey:(NSString *)privateRSAkey;
- (NSString *)encryptRSA:(NSString *)data
               publicKey:(NSString *)publicKey;
- (NSString *)decryptRSA:(NSString *)data
              privateKey:(NSString *)privateKey;
- (void)encryptAsyncRSA:(NSString *)data
              publicKey:(NSString *)publicKey
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;
- (void)decryptAsyncRSA:(NSString *)data
             privateKey:(NSString *)privateKey
                resolve:(RCTPromiseResolveBlock)resolve
                 reject:(RCTPromiseRejectBlock)reject;
- (NSString *)signDataRSA:(NSString *)data
                      key:(NSString *)key;
- (NSNumber *)verifySignatureRSA:(NSString *)data
                 signatureBase64:(NSString *)signatureBase64
                             key:(NSString *)key;
- (NSString *)hashSHA256:(NSString *)input;
- (NSString *)hashSHA512:(NSString *)input;
- (NSString *)generateHMACKey:(double)keySize;
- (NSString *)hmacSHA256:(NSString *)data
                     key:(NSString *)key;
- (NSString *)hmacSHA512:(NSString *)data
                     key:(NSString *)key;
- (NSString *)generateRandomString:(double)input;
- (NSString *)base64Encode:(NSString *)input;
- (NSString *)base64Decode:(NSString *)input;
- (NSString *)pbkdf2:(NSString *)password
                salt:(NSString *)salt
          iterations:(double)iterations
           keyLength:(double)keyLength
                hash:(NSString *)hash;
- (NSString *)getRandomBytes:(double)size;
- (NSString *)encryptRSAOAEP:(NSString *)data
                   publicKey:(NSString *)publicKey;
- (NSString *)decryptRSAOAEP:(NSString *)data
                  privateKey:(NSString *)privateKey;
- (NSDictionary *)generateECDSAKeyPair;
- (NSString *)getPublicECDSAKey:(NSString *)privateECDAkey;
- (NSString *)signDataECDSA:(NSString *)data
                        key:(NSString *)key;
- (NSNumber *)verifySignatureECDSA:(NSString *)data
                   signatureBase64:(NSString *)signatureBase64
                               key:(NSString *)key;

@end

@interface NativeEncryptionSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeEncryption'
   */
  class JSI_EXPORT NativeEncryptionSpecJSI : public ObjCTurboModule {
  public:
    NativeEncryptionSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react

#endif // RNEncryptionSpec_H
