Auto convert PEM/PPK

HTML

<script src="http://sayersr-public.s3.amazonaws.com/jsrsasign-latest-all-min.js"></script>
<textarea id="pem" rows="15" cols="65">-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAhZOHqi0F2vFxXv8pUTOl1uDAZEKvtau84MefIzhAWAmvcKTUBuffKOI47ERT
gPMKpHsl6G95/3A43u2Z5hSv+dZvnOzOnL+7wxacOKja34QrfbPNz2jXdmrzx76JuVoZkPGU+QeK
F7mEZZ3LItOfRMLEtwcKSM56zhoIqHbrcEV4d27pDB+A+BXlDWTWK9bH7RQDTJTnZWd1eh3MfHYL
zVGxP9td2aw1XNsRUlf1AgPbAkz65yrUJNB+yYpztrxK7EHIWKxO8AJyCjWKOaKvjwyLMSLalHJx
AqWBQzhJAqodOqIbYCgtnWAqmb0BeN8EHv6i1MMyCF1VR5GSSi6rlwIDAQABAoIBADhA+VFhxKWA
KQ6oxu27oovr+xo+O2F3AgRoDUz306E/8vKtd92wqPq+yto1rDUSJdk/Q6evyuEYkdrQlY+gBrxg
4oBj+l9pH9n5G7GA6yxWrTozDunabWMhh6kHRVkZ6Mpx8xstYaq8JlXlLjdsiBadL9sky9/9lRpX
PG42JtEQ1PdcXubRFgz7tRdTB5T1UeChJY+gugdQRibFiuK2wAgLzVy37OyXEjZ1SFTxdPZjER9H
x4Y6DhFxGAPvnPjcSUOAVYdiGC4VF8jtXYD9tutS6nWCQ60vr2IgW2fO9Y60+XqWFZZ9e+4huRwg
2qmWHuhEkkl29vVnl8GY0huHh4ECgYEAutrFh0Ob/BVrkNWmGM+6Z89ckCSumLm4omAywJM3hEee
94qaXGwnhKqoFy7r5JPEEVPgUcTk3C7e+vqVV9l0GG1ZBTprysD+gfwm+UwNzS0TCEjkZC3DjlE1
U2hprrzxRwtfWGElwAAS7LKuwwwmHjcmSgzXVKxGieZlUCcGxXMCgYEAtwGQsEKm3mRbD6BLvD8z
UKBvHmix1JtDQQEsoGOD9TSPDtBc9v9dObKTJ8CkN9V3EtLZhwTf01ikG5S2LSY2OG8W1Sbv76C4
MkMjboNeDJgzMATErz7hFBhvKcWjJOeu90h+a1HwmNdZpAaS2wtcXMsrpyhMnxAeY7UETYYzmE0C
gYAJnererFch4URY/vX+fup8H0sHTCwERkK/cK4MBUetMjZ3TRXmvdZG2LWwA8U2TXig361C6BxT
TMJDLpRzIgj8nNwhDcGwfMBclkq3N/fZ4IEDQyUmFsji0UEqWsxdpvHQE0DD/rP/rsFKl2OxPDXW
BkadNw36GKfEvyvltSx/CwKBgGX6kU4nViWHdtb2VD3KWiYLwOAJJ096Vbfbl6qoydfSOgXfRm69
To3gXPBCAUC7y2bJ6D29EZ0MQCa+b+Yo7P31qZuN3xaBUSNxFkV3HumVxrBzd8bQG0y/cPKuF4Nx
N6bE1u2m85O4LVOh9iPp6MYs0V6MrmXU7ZpSPNuWdRnhAoGAJ0YgLyyHz49cMGmiOrPxnDTkYbd/
bmqQWnB/TZnf7C18218/5lcII6QJPlD2/ktWvvpGwh7SUfZASU6RObZ8MLWUlA0ftY/JPBDgV9w1
XTjSe4I09p6wKZwnB12xWtK9OtYZX++tAEofLeG+CnYDpm3WzW8Oit+x9TQ3NBTjH0Y=
-----END RSA PRIVATE KEY-----</textarea>
<br>
<textarea id="ppk" rows="28" cols="65"></textarea>
<br>

JavaScript

$('#pem').on('input propertychange paste', function () {
    convertPEMtoPPK('');
});

function convertPEMtoPPK(pem) {
    var crypt = new RSAKey();
    crypt.readPrivateKeyFromPEMString($('#pem').val());

    var algname = "ssh-rsa";
    var cipherstr = "none";
    var keycomment = "imported-openssh-key";

    var pub_blob = put32bit(algname.length);
    var arrE = parseHexString("0" + crypt.e.toString(16)) // something funny about the e value coming back from jsrsasign
    var arrN = parseHexString("00" + crypt.n.toString(16));

    pub_blob = pub_blob.concat(toByteArray(algname));
    pub_blob = pub_blob.concat(put32bit(arrE.length));
    pub_blob = pub_blob.concat(arrE);
    pub_blob = pub_blob.concat(put32bit(arrN.length));
    pub_blob = pub_blob.concat(arrN);

    var public_b64 = _arrayBufferToBase64(pub_blob, 64)
    var public_lines = public_b64.split('\n').length;

    $('#ppk').append('\n');
    $('#ppk').append('PuTTY-User-Key-File-2: ' + algname + '\n');
    $('#ppk').append('Encryption: ' + cipherstr + '\n');
    $('#ppk').append('Comment: ' + keycomment + '\n');

    $('#ppk').append("Public-Lines: " + public_lines + "\n" + _arrayBufferToBase64(pub_blob, 64));
    $('#ppk').append('\n');

    var priv_blob = [];
    var arrD = parseHexString("00" + crypt.d.toString(16)); //hmm zero prefixes are needed here for some keysizes
    var arrP = parseHexString("00" + crypt.p.toString(16));
    var arrQ = parseHexString("00" + crypt.q.toString(16));
    var arrCoeff = parseHexString("00" + crypt.coeff.toString(16));

    priv_blob = priv_blob.concat(put32bit(arrD.length));
    priv_blob = priv_blob.concat(arrD);
    priv_blob = priv_blob.concat(put32bit(arrP.length));
    priv_blob = priv_blob.concat(arrP);
    priv_blob = priv_blob.concat(put32bit(arrQ.length));
    priv_blob = priv_blob.concat(arrQ);
    priv_blob = priv_blob.concat(put32bit(arrCoeff.length));
    priv_blob = priv_blob.concat(arrCoeff);

    var private_b64 =...