<!---->
<!doctype html>
<html>
  <head>
    <title>GP LD LK</title>
    <script type="text/javascript">
    //init jsencryp
    var encrypt = new JSEncrypt();
    //add publib key provided byu greenpay with no \n
    encrypt.setPublicKey("MIGfMA0GCSqGSIb3DQEBA....QUAA4GNADCBiQKBg");
    
    $(function() {
        // cardDataObject is the object that must be encrypted when you are going to create a  token
        var cardDataObject = {
            "card":{
                "cardHolder": "Tico payment user", //must have more tha 5 chars
                "expirationDate": {
                    "month": 12,
                    "year": 23
                },
                "cardNumber": "4242424242424242",
                "cvc": "123",
                "nickname": "nickname" //more than 5 chars and less tan 50 chars
            },
            "token":"1c3a0f89-1515-402c-88e5-50814f854706"
        };
        // encrypt the card data and print the log in console
        var cardDataEcrypted = pack(cardDataObject, undefined);
        console.log('Card data encrypted:', JSON.stringify(cardDataEcrypted));
    });
    function pack(obj, pair_) {
        var pair = (pair_ !== undefined) ? pair_ : this.generateAESPairs();
        var textBytes = aesjs.utils.utf8.toBytes(JSON.stringify(obj));
        var aesCtr = new aesjs.ModeOfOperation.ctr(pair.k, new aesjs.Counter(pair.s));
        var encryptedBytes = aesCtr.encrypt(textBytes);
        var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
        var returnObj = {
            ld:encryptedHex,
            lk:encrypt.encrypt(JSON.stringify(pair))
        };
        return returnObj;
    }
    
    function generateAESPairs () {
        var key = []
        var iv = 0;
        for (var k = 0; k < 16; k++) {
            key.push(Math.floor(Math.random() * 255))
        }
        for (var k = 0; k < 16; k++) {
            iv = Math.floor(Math.random() * 255)
        }
        return {
            k: key,
            s: iv
        }
    }
    </script> 
  </head>
  <body>
  </body>
</html>