yourkarma / JWT

A JSON Web Token implementation in Objective-C.
MIT License
351 stars 106 forks source link

RS256 failed when encoding #242

Open sambo-nbc opened 2 years ago

sambo-nbc commented 2 years ago

New Issue Checklist

Issue Info

Info Value
Platform Name e.g. ios
Platform Version e.g. 12.0.1
CocoaLumberjack Version e.g. 2.3.0
Integration Method cocoapods
Xcode Version e.g. Xcode 13.1
Repro rate e.g. all the time (100%) / sometimes x% / only once
Demo project link

Issue Description and Steps

Encode with RS256 using string data of a private key, but I got error Error Domain=NSOSStatusErrorDomain Code=-50 "RSA private key creation from data failed" UserInfo={numberOfErrorsDeep=0, NSDescription=RSA private key creation from data failed}

Here is code sample:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"key"];
    NSString *key = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

    NSDictionary *payload = @{@"payload" : @"hidden_information"};

    id <JWTAlgorithmDataHolderProtocol> signDataHolder = [JWTAlgorithmRSFamilyDataHolder new]
            .keyExtractorType([JWTCryptoKeyExtractor privateKeyWithPEMBase64].type)
            .privateKeyCertificatePassphrase(nil)
            .algorithmName(JWTAlgorithmNameRS256).secret(key);

    JWTCodingResultType *result = [JWTEncodingBuilder encodePayload:payload]
        .addHolder(signDataHolder)
        .result;

    NSString *token = result.successResult.encoded;
    NSError *error = result.errorResult.error;

    NSLog(@"%@", token);
    NSLog(@"%@", error);```

Private key: 

-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAtW3q34xSvWw/v0icR5B4SX9BxBOt7oiY7TZSVVAhOQE5juSM dTH0rzrVKRIk3AC602WD4wAi2x/vt2zGCLgzlhdUbqohXTX2BAlQE4iZG97fsinK I3AhQ03gH3m5MzOl7lpcEsBBkhvXFUs60/UaPTXdyjjJjT5wgF6EGvZOTLKm5PCh CPemhdwgiGNhT2fc9pZHDDoPFeQZa8c/FRitpTXo+8ryOF0w4p6j5GP+v+OhydLS h6EARzFP4uAh1HRotWego0i8375ID/FbnpUiMwO5cFw9LklsRFQEXeljloHWKLUz qnmXFZkRln1UljboVdiw5SfC9bWIfKMlMydKowIDAQABAoIBAAh0XNOaCGkHWFkj mxTCqLhUE859VEefWfED7QZIu6OaaQI9qEX10/8ucKx/SfRunEYpnuG/KeCoNlWH 3hqd6tl9sNOPXgqn7xT1EiQ241unISl+RQstuH8Ya+9LjtPR/lODJnNBPkz+uyEk 5lLmQxjDH9jCmLHaTQfOX72Z6MAuJvsUqvNxy2/zXPSNT7C6GXMyhGSct1hPDC3D yT+q11MebvSO2oG3+GlfWAv4miKd6lYpsDVEuCYCLTXKJ1+VY71r75JhtOcKCfOX Fw02u7wf9SKTnkxBEqpb1dkOd6/WowvFdPPQEVN7TZWvCNnOSVe3Fm5PCngOcUvC 6/wEPTECgYEA3+hwiBeNPVBaoJ5KCTR4+vqZC9z6Vgj/Jx2926b1CaBsxn7J8Mfo xgfN0BBbpagFgNKidnNtRkaDRAm9tO+v6kwbhGyxuo2Mk0Qui+5tr2G+KjJEZqRQ Wkl77VrjVLhrscoz7fF10/1zjF2GCt7e1spKSsqoTg3AYwIbCmdqYY0CgYEAz27d z4DcVp8OwHdnna0kAzzfQaDSa1fM7oxnsJg2KqTpJkLYg1G8KQYW9BMDpRqLu7L0 JIHESfO+X6ztr6PSzPh/KO2OLwVU/0NgAyGAudQlxK2EO89Dw7xE4HN9XKGJvuhF MX+X3kqOYRhj4TNPFj06ZPsGLmbKnis3Jsm1GO8CgYAKad0R90ZyW5JbdgErfG1D /vOvQY/DAJgdUZzK4nDzCasFcFAkCqggzawcySX6Bl57J1C3AZdLdWwVdf6Es8ES vIdrGUMK0hp/nuQrTeN8DKezfrL/sxSpnlFNMLTx88HOewD/SAOa4GbHWHIrf0IN 60qZP+Oj/a+86xQm37hq4QKBgHyJ0IxLjn5HIsE1LzWAhRWYj2XEm3CtFzHFhF+H E0ZJGl3JVlqJURHEQTWq0M5ogKphh6j/bA0GVS72EQIZtm8vZpD5Bxt99QkIt3VJ wRJQp5hMoQ6Toti6iRPE4ughaCUBKMHOHCzu0ErFLPpBJuNwQUXtXEmxl0adJZCZ G6xrAoGBANMEeeNMy37InmFXZtWI4V/Vo5jCva4YkgDCWbemmXV6nttACKk2WGiY uuXiBGdcshk0gb5Lb96VAgUV9CwAiP319C3D/fL2At8hxpR9tIOXLT/K+yhuMiSj 8DbsRTtONC4MgrJUskm1BEtocoKdKk/ipN6BQ9lwzQDq+43uQjHJ -----END RSA PRIVATE KEY-----


Could anyone here help me regard this issue, please? 🙏 
lolgear commented 2 years ago

Are you sure that this is a valid RSA key?

OpenSSL can't extract public key from it.

openssl rsa -in private.pem -pubout > public.pem
sambo-nbc commented 2 years ago

@lolgear
I generate RSA keypair with command below: openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out public.crt

lolgear commented 2 years ago

@sambo-nbc Try to regenerate key and extract its public part.

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out public.crt
openssl rsa -in private.pem -pubout > public.pem

It should work.