Latest
Browser interest query
Test file is called index.html
diff --git a/latest/KeyLocator.js b/latest/KeyLocator.js
new file mode 100644
index 0000000..73c95fb
--- /dev/null
+++ b/latest/KeyLocator.js
@@ -0,0 +1,119 @@
+
+
+
+
+
+var KeyLocatorType = {
+ NAME:1,
+ KEY:2,
+ CERTIFICATE:3
+};
+
+var KeyLocator = function KeyLocator(_Input,_Type){
+
+ //this.KeyName = _KeyName;
+ //this.PublicKey = _PublicKey;
+ //this.Certificate = _Certificate;
+
+ this.Type=_Type;
+
+ if (_Type==KeyLocatorType.NAME){
+ this.KeyName = _Input;
+ }
+ else if(_Type==KeyLocatorType.KEY){
+ this.PublicKey = _Input;
+ }
+ else if(_Type==KeyLocatorType.CERTIFICATE){
+ this.Certificate = _Input;
+ }
+
+};
+
+KeyLocator.prototype.decode = function(decoder) {
+
+ decoder.readStartElement(this.getElementLabel());
+
+ if (decoder.peekStartElement(CCNProtocolDTags.Key)) {
+ try {
+ encodedKey = decoder.readBinaryElement(CCNProtocolDTags.Key);
+ // This is a DER-encoded SubjectPublicKeyInfo.
+
+ //TODO FIX THIS, SHOULDN'T be like that
+ this.Key = encodedKey;//CryptoUtil.getPublicKey(encodedKey);
+
+ this.PublicKey = encodedKey;
+
+
+ } catch (e) {
+ console.log("Cannot parse stored key: error: " + e);
+ throw new ContentDecodingException("Cannot parse key: ", e);
+ }
+
+ if (null == this.Key) {
+ throw new Exception("Cannot parse key: ");
+ }
+
+ } else if ( decoder.peekStartElement(CCNProtocolDTags.Certificate)) {
+ try {
+ encodedCert = decoder.readBinaryElement(CCNProtocolDTags.Certificate);
+
+ /*
+ * Certificates not yet working
+ */
+
+ //CertificateFactory factory = CertificateFactory.getInstance("X.509");
+ //this.Certificate = (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(encodedCert));
+
+ } catch ( e) {
+ throw new Exception("Cannot decode certificate: " + e);
+ }
+ if (null == this.Certificate) {
+ throw new Exception("Cannot parse certificate! ");
+ }
+ } else {
+ this.KeyName = new KeyName();
+ this.KeyName.decode(decoder);
+ }
+ decoder.readEndElement();
+ }
+
+
+ KeyLocator.prototype.encode = function( encoder) {
+ /*if (!validate()) {
+ throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+ }*/
+
+
+ //TODO FIX THIS TOO
+ encoder.writeStartElement(this.getElementLabel());
+
+ if (this._Type == KeyLocatorType.KEY) {
+ console.log('HERE');
+
+ encoder.writeElement(CCNProtocolDTags.Key, this.PublicKey);
+
+ } else if (this.Type == KeyLocatorType.CERTIFICATE) {
+ console.log('NO HERE');
+
+ try {
+ encoder.writeElement(CCNProtocolDTags.Certificate, this.Certificate.getEncoded());
+ } catch ( e) {
+ throw new Exception("CertificateEncodingException attempting to write key locator: " + e);
+ }
+
+ } else if (this.Type == KeyLocatorType.NAME) {
+ console.log('ACTUALLY HERE');
+ this.KeyName.encode(encoder);
+ }
+ encoder.writeEndElement();
+
+};
+
+KeyLocator.prototype.getElementLabel = function() {
+ return CCNProtocolDTags.KeyLocator;
+};
+
+KeyLocator.prototype.validate = function() {
+ return ( (null != this.keyName) || (null != this.PublicKey) || (null != this.Certificate) );
+};
+
\ No newline at end of file