81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @requires enums
|
|
* @module packet
|
|
*/
|
|
var enums = require('../enums.js');
|
|
|
|
// This is pretty ugly, but browserify needs to have the requires explicitly written.
|
|
|
|
module.exports = {
|
|
/** @see module:packet/compressed */
|
|
Compressed: require('./compressed.js'),
|
|
/** @see module:packet/sym_encrypted_integrity_protected */
|
|
SymEncryptedIntegrityProtected: require('./sym_encrypted_integrity_protected.js'),
|
|
/** @see module:packet/public_key_encrypted_session_key */
|
|
PublicKeyEncryptedSessionKey: require('./public_key_encrypted_session_key.js'),
|
|
/** @see module:packet/sym_encrypted_session_key */
|
|
SymEncryptedSessionKey: require('./sym_encrypted_session_key.js'),
|
|
/** @see module:packet/literal */
|
|
Literal: require('./literal.js'),
|
|
/** @see module:packet/public_key */
|
|
PublicKey: require('./public_key.js'),
|
|
/** @see module:packet/symmetrically_encrypted */
|
|
SymmetricallyEncrypted: require('./symmetrically_encrypted.js'),
|
|
/** @see module:packet/marker */
|
|
Marker: require('./marker.js'),
|
|
/** @see module:packet/public_subkey */
|
|
PublicSubkey: require('./public_subkey.js'),
|
|
/** @see module:packet/user_attribute */
|
|
UserAttribute: require('./user_attribute.js'),
|
|
/** @see module:packet/one_pass_signature */
|
|
OnePassSignature: require('./one_pass_signature.js'),
|
|
/** @see module:packet/secret_key */
|
|
SecretKey: require('./secret_key.js'),
|
|
/** @see module:packet/userid */
|
|
Userid: require('./userid.js'),
|
|
/** @see module:packet/secret_subkey */
|
|
SecretSubkey: require('./secret_subkey.js'),
|
|
/** @see module:packet/signature */
|
|
Signature: require('./signature.js'),
|
|
/** @see module:packet/trust */
|
|
Trust: require('./trust.js'),
|
|
/**
|
|
* Allocate a new packet
|
|
* @param {String} tag property name from {@link module:enums.packet}
|
|
* @returns {Object} new packet object with type based on tag
|
|
*/
|
|
newPacketFromTag: function (tag) {
|
|
return new this[packetClassFromTagName(tag)]();
|
|
},
|
|
/**
|
|
* Allocate a new packet from structured packet clone
|
|
* See {@link http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#safe-passing-of-structured-data}
|
|
* @param {Object} packetClone packet clone
|
|
* @returns {Object} new packet object with data from packet clone
|
|
*/
|
|
fromStructuredClone: function(packetClone) {
|
|
var tagName = enums.read(enums.packet, packetClone.tag);
|
|
var packet = this.newPacketFromTag(tagName);
|
|
for (var attr in packetClone) {
|
|
if (packetClone.hasOwnProperty(attr)) {
|
|
packet[attr] = packetClone[attr];
|
|
}
|
|
}
|
|
if (packet.postCloneTypeFix) {
|
|
packet.postCloneTypeFix();
|
|
}
|
|
return packet;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Convert tag name to class name
|
|
* @param {String} tag property name from {@link module:enums.packet}
|
|
* @returns {String}
|
|
*/
|
|
function packetClassFromTagName(tag) {
|
|
return tag.substr(0, 1).toUpperCase() + tag.substr(1);
|
|
}
|