diff options
Diffstat (limited to 'dom/webidl/SecureElement.webidl')
-rw-r--r-- | dom/webidl/SecureElement.webidl | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/dom/webidl/SecureElement.webidl b/dom/webidl/SecureElement.webidl new file mode 100644 index 000000000..1f247aac0 --- /dev/null +++ b/dom/webidl/SecureElement.webidl @@ -0,0 +1,158 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + /* Copyright © 2014 Deutsche Telekom, Inc. */ + +enum SEType { + "uicc", + "eSE" +}; + +enum SEError { + "SESecurityError", // Requested operation does not match the access control rules of the application. + "SEIoError", // I/O Error while communicating with the secure element. + "SEBadStateError", // Error occuring as a result of bad state. + "SEInvalidChannelError", // Opening a channel failed because no channel is available. + "SEInvalidApplicationError", // The requested application was not found on the secure element. + "SENotPresentError", // Secure Element is not present + "SEIllegalParameterError", // Request operation does not have valid parameters. + "SEGenericError" // Generic failures. +}; + +enum SEChannelType { + "basic", + "logical" +}; + +// Dictionary that represents an APDU command to be sent to a secure element. +dictionary SECommand { + required octet cla; // Class Byte + required octet ins; // Instruction Byte + required octet p1; // First Octet of Parameters Byte + required octet p2; // Second Octet of Parameters Byte + sequence<octet>? data = null; // Sequence of octets + short le = -1; // The length of the expected + // response data or -1 if none is expected +}; + +[Pref="dom.secureelement.enabled", + ChromeOnly, + JSImplementation="@mozilla.org/secureelement/reader;1"] +interface SEReader { + + // 'true' if a secure element is present + readonly attribute boolean isSEPresent; + + // Type of SecureElement + readonly attribute SEType type; + + /** + * Opens a session with the Secure Element. + * Note that a reader may have several opened sessions. + * + * @return If the operation is successful the promise is resolved with an instance of SESession. + */ + [Throws] + Promise<SESession> openSession(); + + /** + * Closes all sessions associated with this Reader and its associated channels. + * + */ + [Throws] + Promise<void> closeAll(); +}; + +[Pref="dom.secureelement.enabled", + ChromeOnly, + JSImplementation="@mozilla.org/secureelement/session;1"] +interface SESession { + + // 'reader' that provides this session + readonly attribute SEReader reader; + + // Status of current session + readonly attribute boolean isClosed; + + /** + * Opens a communication logical channel to an application on Secure Element identified by the AID. + * The 'aid' can be null for some secure elements. + * + * @param aid + * Application Identifier of the Card Applet on the secure element. + * If the 'aid' is null : + * For secure element type 'eSE', the default applet is selected. + * For secure element type 'uicc', the request will be immediately rejected. + * Note that the length of 'aid should be between 5 and 16. + * + * @return If the operation is successful the promise is resolved with an instance of SEChannel. + */ + [Throws] + Promise<SEChannel> openLogicalChannel(Uint8Array? aid); + + /** + * Close all active channels associated with this session. + * + */ + [Throws] + Promise<void> closeAll(); +}; + +[Pref="dom.secureelement.enabled", + ChromeOnly, + JSImplementation="@mozilla.org/secureelement/channel;1"] +interface SEChannel { + + // 'session' obj this channel is bound to + readonly attribute SESession session; + + // response to openBasicChannel / openLogicalChannel operation + [Constant, Cached] readonly attribute Uint8Array? openResponse; + + // Status of channel + readonly attribute boolean isClosed; + + // Type of channel + readonly attribute SEChannelType type; + + /** + * Transmits the APDU command to the secure element. This is an atomic operation that transmits + * an APDU command (as per ISO7816-4) to the secure element (UICC / eSE). Upon receiving response + * to the transmit apdu command, it is propogated to the applications using SEResponse object. + * + * @param command + * SECommand to be sent to secure element + * + * @return If success, the promise is resolved with the new created + * SEResponse object. Otherwise, rejected with the error of type 'SEError'. + */ + [Throws] + Promise<SEResponse> transmit(optional SECommand command); + + /** + * Closes the active channel. + * + */ + [Throws] + Promise<void> close(); +}; + +[Pref="dom.secureelement.enabled", + ChromeOnly, + JSImplementation="@mozilla.org/secureelement/response;1"] +interface SEResponse { + // Response received on this 'channel' object. + [Constant] readonly attribute SEChannel channel; + + // First octet of response's status word + [Constant] readonly attribute octet sw1; + + // Second octet of response's status word + [Constant] readonly attribute octet sw2; + + // The response's data field bytes + [Cached, Pure] readonly attribute sequence<octet>? data; + +}; + |