3434import static com .formkiq .stacks .dynamodb .ConfigService .MAX_WEBHOOKS ;
3535import static com .formkiq .stacks .dynamodb .ConfigService .NOTIFICATION_EMAIL ;
3636
37+ import java .io .IOException ;
38+ import java .io .StringReader ;
3739import java .security .KeyFactory ;
3840import java .security .NoSuchAlgorithmException ;
3941import java .security .PrivateKey ;
4547import java .util .HashMap ;
4648import java .util .Map ;
4749import java .util .Optional ;
50+ import java .util .Properties ;
51+
4852import com .amazonaws .services .lambda .runtime .LambdaLogger ;
4953import com .formkiq .aws .dynamodb .DynamicObject ;
5054import com .formkiq .aws .dynamodb .objects .Strings ;
@@ -300,7 +304,8 @@ private void validateDocusign(final Map<String, Object> map,
300304 private boolean isValidRsaPrivateKey (final String privateKeyPem ) {
301305 try {
302306 // Remove the PEM header and footer
303- String privateKeyPemStripped = privateKeyPem .replace ("-----BEGIN RSA PRIVATE KEY-----" , "" )
307+ String privateKeyPemStripped = decodeUnicode (privateKeyPem )
308+ .replace ("-----BEGIN RSA PRIVATE KEY-----" , "" )
304309 .replace ("-----END RSA PRIVATE KEY-----" , "" ).replace ("\\ n" , "" ).replaceAll ("\\ s+" , "" );
305310
306311 byte [] privateKeyBytes = Base64 .getDecoder ().decode (privateKeyPemStripped );
@@ -315,4 +320,26 @@ private boolean isValidRsaPrivateKey(final String privateKeyPem) {
315320 return false ;
316321 }
317322 }
323+
324+ /**
325+ * Decode Unicode sequences.
326+ *
327+ * @param input {@link String}
328+ * @return String
329+ */
330+ private String decodeUnicode (final String input ) {
331+
332+ String result = input ;
333+ if (input != null ) {
334+ Properties properties = new Properties ();
335+ try {
336+ properties .load (new StringReader ("key=" + input ));
337+ result = properties .getProperty ("key" );
338+ } catch (IOException e ) {
339+ // ignore
340+ }
341+ }
342+
343+ return result ;
344+ }
318345}
0 commit comments