<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: CyberSource card number encryption (RSA-OAEP-256) in cybersource APIs</title>
    <link>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84298#M429</link>
    <description>&lt;DIV class=""&gt;Thanks for sharing good information. But you also need to know I have a problem with my. Can you solve it?&lt;/DIV&gt;</description>
    <pubDate>Tue, 27 Sep 2022 18:01:13 GMT</pubDate>
    <dc:creator>Jones-Joes</dc:creator>
    <dc:date>2022-09-27T18:01:13Z</dc:date>
    <item>
      <title>CyberSource card number encryption (RSA-OAEP-256)</title>
      <link>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84260#M417</link>
      <description>&lt;P&gt;Is there anyone know here how do I encrypt card number in cybersource?&lt;/P&gt;&lt;P&gt;i tried to encrypt mine using online RSAOAEP encryption tool but i got this response&lt;/P&gt;&lt;PRE&gt;{
    &lt;SPAN class=""&gt;"responseStatus"&lt;/SPAN&gt;: {
        &lt;SPAN class=""&gt;"status"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;400&lt;/SPAN&gt;,
        &lt;SPAN class=""&gt;"reason"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"DECRYPTION_ERROR"&lt;/SPAN&gt;,
        &lt;SPAN class=""&gt;"message"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"Cannot decrypt PAN (RsaOaep256): data hash wrong"&lt;/SPAN&gt;,
        &lt;SPAN class=""&gt;"correlationId"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;null&lt;/SPAN&gt;,
        &lt;SPAN class=""&gt;"details"&lt;/SPAN&gt;: [],
        &lt;SPAN class=""&gt;"_embedded"&lt;/SPAN&gt;: {}
    },
    &lt;SPAN class=""&gt;"_links"&lt;/SPAN&gt;: {
        &lt;SPAN class=""&gt;"self"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;null&lt;/SPAN&gt;,
        &lt;SPAN class=""&gt;"documentation"&lt;/SPAN&gt;: [],
        &lt;SPAN class=""&gt;"next"&lt;/SPAN&gt;: []
    }
}&lt;/PRE&gt;&lt;P&gt;there documentation seems not enough for newbie like me&lt;/P&gt;</description>
      <pubDate>Fri, 23 Sep 2022 06:40:20 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84260#M417</guid>
      <dc:creator>JiwanFilembar</dc:creator>
      <dc:date>2022-09-23T06:40:20Z</dc:date>
    </item>
    <item>
      <title>Re: CyberSource card number encryption (RSA-OAEP-256)</title>
      <link>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84276#M424</link>
      <description>&lt;P&gt;I've been able to get Flex API to work. But whay kind of SDK have you been using? I've implemented it with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;React Native v0.61.5&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Typescript&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and with multiple cryptographic libraries: &lt;A href="https://voojio.com/chatroom/omegle" target="_blank" rel="noopener"&gt;voojio&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/tradle/react-native-crypto" target="_blank" rel="nofollow noopener noreferrer"&gt;react-native-crypto&lt;/A&gt;,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/kevlened/isomorphic-webcrypto" target="_blank" rel="nofollow noopener noreferrer"&gt;isomorphic-webcrypto&lt;/A&gt;,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/brix/crypto-js" target="_blank" rel="nofollow noopener noreferrer"&gt;crypto-js&lt;/A&gt;,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/dankogai/js-base64" target="_blank" rel="nofollow noopener noreferrer"&gt;js-base64&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp; &lt;A href="https://omegle.ws" target="_blank" rel="noopener"&gt;ome&lt;/A&gt;&lt;A href="https://omegle.club" target="_blank" rel="noopener"&gt;gle&lt;/A&gt; &lt;A href="https://shagle.download" target="_blank" rel="noopener"&gt;shagle&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;and&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/feross/buffer" target="_blank" rel="nofollow noopener noreferrer"&gt;buffer&lt;/A&gt;. But basically this could be done on any Javascript framework.&lt;/P&gt;&lt;P&gt;I suppose you have&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;/Keys&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;request working and i guess you have specified the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;encryptionType&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;RsaOaep256.&lt;/P&gt;&lt;P&gt;Next step is to import the JSON web key (JWK) you received from previous step and encrypt the card number with imported key.&lt;/P&gt;&lt;H3&gt;Import the JWK&lt;/H3&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;import&lt;/SPAN&gt; webcrypto &lt;SPAN class=""&gt;from&lt;/SPAN&gt; &lt;SPAN class=""&gt;"isomorphic-webcrypto"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;const&lt;/SPAN&gt; &lt;SPAN class=""&gt;importKey&lt;/SPAN&gt; = &lt;SPAN class=""&gt;async&lt;/SPAN&gt; (&lt;SPAN class=""&gt;jsonWebKey: any&lt;/SPAN&gt;) =&amp;gt; {
  &lt;SPAN class=""&gt;return&lt;/SPAN&gt; webcrypto.&lt;SPAN class=""&gt;subtle&lt;/SPAN&gt;.&lt;SPAN class=""&gt;importKey&lt;/SPAN&gt;(
    &lt;SPAN class=""&gt;"jwk"&lt;/SPAN&gt;,
    {
      ...jsonWebKey,
      &lt;SPAN class=""&gt;alg&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"RSA-OAEP-256"&lt;/SPAN&gt;,
      &lt;SPAN class=""&gt;ext&lt;/SPAN&gt;: &lt;SPAN class=""&gt;true&lt;/SPAN&gt;,
    },
    {
      &lt;SPAN class=""&gt;name&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"RSA-OAEP"&lt;/SPAN&gt;,
      &lt;SPAN class=""&gt;hash&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"SHA-256"&lt;/SPAN&gt;,
    },
    &lt;SPAN class=""&gt;false&lt;/SPAN&gt;,
    [&lt;SPAN class=""&gt;"encrypt"&lt;/SPAN&gt;],
  )
}&lt;/PRE&gt;&lt;H3&gt;Encrypting the card number&lt;/H3&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;import&lt;/SPAN&gt; { &lt;SPAN class=""&gt;Buffer&lt;/SPAN&gt; } &lt;SPAN class=""&gt;from&lt;/SPAN&gt; &lt;SPAN class=""&gt;"buffer"&lt;/SPAN&gt;
&lt;SPAN class=""&gt;import&lt;/SPAN&gt; webcrypto &lt;SPAN class=""&gt;from&lt;/SPAN&gt; &lt;SPAN class=""&gt;"isomorphic-webcrypto"&lt;/SPAN&gt;
&lt;SPAN class=""&gt;import&lt;/SPAN&gt; { &lt;SPAN class=""&gt;Base64&lt;/SPAN&gt; } &lt;SPAN class=""&gt;from&lt;/SPAN&gt; &lt;SPAN class=""&gt;"js-base64"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;const&lt;/SPAN&gt; encryptCardNumber = &lt;SPAN class=""&gt;async&lt;/SPAN&gt; (&lt;SPAN class=""&gt;cardNumber&lt;/SPAN&gt;: string, &lt;SPAN class=""&gt;jsonWebKey&lt;/SPAN&gt;: any): &lt;SPAN class=""&gt;Promise&lt;/SPAN&gt;&amp;lt;T&amp;gt; = {
  &lt;SPAN class=""&gt;const&lt;/SPAN&gt; cardNumberBuffer = &lt;SPAN class=""&gt;Buffer&lt;/SPAN&gt;.&lt;SPAN class=""&gt;from&lt;/SPAN&gt;(cardNumber)

  &lt;SPAN class=""&gt;const&lt;/SPAN&gt; publicKey = &lt;SPAN class=""&gt;await&lt;/SPAN&gt; &lt;SPAN class=""&gt;importKey&lt;/SPAN&gt;(jsonWebKey, &lt;SPAN class=""&gt;"encrypt"&lt;/SPAN&gt;)

  &lt;SPAN class=""&gt;const&lt;/SPAN&gt; encryptedCardNumberBuffer = &lt;SPAN class=""&gt;await&lt;/SPAN&gt; webcrypto.&lt;SPAN class=""&gt;subtle&lt;/SPAN&gt;.&lt;SPAN class=""&gt;encrypt&lt;/SPAN&gt;(
    {
      &lt;SPAN class=""&gt;name&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"RSA-OAEP"&lt;/SPAN&gt;,
      &lt;SPAN class=""&gt;hash&lt;/SPAN&gt;: &lt;SPAN class=""&gt;"SHA-256"&lt;/SPAN&gt;,
    },
    publicKey,
    cardNumberBuffer
  )

  &lt;SPAN class=""&gt;return&lt;/SPAN&gt; &lt;SPAN class=""&gt;Base64&lt;/SPAN&gt;.&lt;SPAN class=""&gt;btoa&lt;/SPAN&gt;(&lt;SPAN class=""&gt;String&lt;/SPAN&gt;.&lt;SPAN class=""&gt;fromCharCode&lt;/SPAN&gt;.&lt;SPAN class=""&gt;apply&lt;/SPAN&gt;(&lt;SPAN class=""&gt;null&lt;/SPAN&gt;, &lt;SPAN class=""&gt;new&lt;/SPAN&gt; &lt;SPAN class=""&gt;Uint8Array&lt;/SPAN&gt;(encryptedCardNumberBuffer)))
}&lt;/PRE&gt;&lt;P&gt;Result from this function can be dirrectly passed as&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;cardNumber&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in body of a request under&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;cardInfo.&lt;/P&gt;&lt;P&gt;After this, you'll receive&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;token,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;signature,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;signedFields&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and some other fields. You should verify received values against the signature to ensure the values have not been tampered with.&lt;/P&gt;&lt;H3&gt;Verifying the signature&lt;/H3&gt;&lt;P&gt;This one is pretty simple, we'll just need the public key from&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;/Keys&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;request that we can find under&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;der/publicKey.&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;import&lt;/SPAN&gt; crypto &lt;SPAN class=""&gt;from&lt;/SPAN&gt; &lt;SPAN class=""&gt;"react-native-crypto"&lt;/SPAN&gt;

&lt;SPAN class=""&gt;const&lt;/SPAN&gt; verifySignature = (&lt;SPAN class=""&gt;publicKey&lt;/SPAN&gt;: string, &lt;SPAN class=""&gt;signature&lt;/SPAN&gt;: string, &lt;SPAN class=""&gt;signedFields&lt;/SPAN&gt;: string, &lt;SPAN class=""&gt;data&lt;/SPAN&gt;: any): &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;booelan&lt;/SPAN&gt; =&amp;gt;&lt;/SPAN&gt; {
  &lt;SPAN class=""&gt;const&lt;/SPAN&gt; dataToVerify = data.&lt;SPAN class=""&gt;signedFields&lt;/SPAN&gt;.&lt;SPAN class=""&gt;split&lt;/SPAN&gt;(&lt;SPAN class=""&gt;","&lt;/SPAN&gt;).&lt;SPAN class=""&gt;map&lt;/SPAN&gt;(&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;field&lt;/SPAN&gt; =&amp;gt;&lt;/SPAN&gt; data[field]).&lt;SPAN class=""&gt;join&lt;/SPAN&gt;(&lt;SPAN class=""&gt;","&lt;/SPAN&gt;)
  &lt;SPAN class=""&gt;const&lt;/SPAN&gt; verificationKey = &lt;SPAN class=""&gt;`-----BEGIN PUBLIC KEY-----\n&lt;SPAN class=""&gt;${publicKey}&lt;/SPAN&gt;\n-----END PUBLIC KEY-----`&lt;/SPAN&gt;

  &lt;SPAN class=""&gt;return&lt;/SPAN&gt; crypto.&lt;SPAN class=""&gt;createVerify&lt;/SPAN&gt;(&lt;SPAN class=""&gt;"RSA-SHA512"&lt;/SPAN&gt;).&lt;SPAN class=""&gt;update&lt;/SPAN&gt;(dataToVerify).&lt;SPAN class=""&gt;verify&lt;/SPAN&gt;(verificationKey, signature, &lt;SPAN class=""&gt;"base64"&lt;/SPAN&gt;)
},&lt;/PRE&gt;&lt;P&gt;I hope this will help you or others having trouble with implementing the Flex API of CyberSource because that has taken toll on me...&lt;/P&gt;</description>
      <pubDate>Mon, 26 Sep 2022 04:25:21 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84276#M424</guid>
      <dc:creator>JiwanFilembar</dc:creator>
      <dc:date>2022-09-26T04:25:21Z</dc:date>
    </item>
    <item>
      <title>Re: CyberSource card number encryption (RSA-OAEP-256)</title>
      <link>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84278#M426</link>
      <description>&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;P class=""&gt;There are several suitepayments partners that already have integrated tokens. As noted by nick, cybersource does not have their suitepayments bundle ready yet. If you re interested in seeing some examples of integrated vendors, fee free to Dm me&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 26 Sep 2022 06:37:59 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84278#M426</guid>
      <dc:creator>kaludon209</dc:creator>
      <dc:date>2022-09-26T06:37:59Z</dc:date>
    </item>
    <item>
      <title>Re: CyberSource card number encryption (RSA-OAEP-256)</title>
      <link>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84298#M429</link>
      <description>&lt;DIV class=""&gt;Thanks for sharing good information. But you also need to know I have a problem with my. Can you solve it?&lt;/DIV&gt;</description>
      <pubDate>Tue, 27 Sep 2022 18:01:13 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/cybersource-APIs/CyberSource-card-number-encryption-RSA-OAEP-256/m-p/84298#M429</guid>
      <dc:creator>Jones-Joes</dc:creator>
      <dc:date>2022-09-27T18:01:13Z</dc:date>
    </item>
  </channel>
</rss>

