An efficient authentication method for providing a user access to a primary server and at least one secondary server. An efficient authentication system for primary and secondary servers for providing secure access to a user.
|
19. An efficient authentication method for providing access to a secondary server in response to authenticating a user at a remote primary server, comprising:
(a) receiving from the remote primary server, a username for authenticating the user at the remote primary server;
(b) receiving a primary hashed output code from a client device configured for entering the username wherein the client device received the primary hashed output code from the remote primary server;
(c) providing the secondary server with a hash key;
(d) performing a hash algorithm at the secondary server on the username using the hash key to produce a secondary hashed output code;
(e) comparing the primary hashed output code and the secondary hashed output code to generate a result based on the comparison; and
(f) providing access to the secondary server based on the result.
24. A secondary server operable to provide access to a user in response to authenticating the user at a remote primary server, the secondary server comprising:
(a) a link for a communicative relationship with the remote primary server, the link being operable to receive a username for authenticating the user at the remote primary server and a primary hashed output code of the username, wherein the link is operable to receive the primary hashed output code from a client device configured for entering the username and the client device received the primary hashed output code from the remote primary server;
(b) a hash algorithm module for performing a hash algorithm on the username utilizing the hash key to generate a secondary hashed output code; and
(c) a hashed output compare module for comparing the primary hashed output code and the secondary hashed output code to determine whether to provide the user access to the secondary server.
1. An efficient authentication method for providing a user access to a primary server and at least one secondary server, said primary server and said at least one secondary server being in a communicative relationship, said method comprising:
(a) entering a username into a client device;
(b) providing said username and a hash key to at least one secondary server;
(c) authenticating said user to said primary server based on said username and a password;
(d) performing a primary hash algorithm on said username and said hash key to produce a primary hashed output code;
(e) performing a secondary hash algorithm on said username and said hash key to produce a secondary hashed output code;
(f) providing said primary hashed output code to the client device;
(g) providing said primary hashed output code from the client device to said at least one secondary server;
(h) comparing said primary hashed output code and said secondary hashed output code at said at least one secondary server; and
(i) authenticating said user to said at least one secondary server based on the results thereof.
8. An efficient authentication system for primary and secondary servers for providing secure access to a user, said user providing a username and a password, said system comprising:
(a) entering a username and password into a client device;
(b) a primary server having a primary hash algorithm module and an authentication module, the authentication module being operable to receive the username and the password entered into the client device and to authenticate the user at the primary server based on said username and said password;
(c) a secondary server having a secondary hash algorithm module and a hashed output compare module;
(d) said secondary server being configured to receive a hash key and said username;
(e) said primary hash algorithm module having a hash function for generating a primary hashed output code of said username utilizing said hash key, wherein said primary server is operable to provide said primary hashed output code to said client device and said client device being operable to provide said primary hashed output code to said secondary server;
(f) said secondary hash algorithm module having said hash function for generating a secondary hashed output code of said username utilizing said hash key; and
(g) said hashed output compare module being operable to compare said primary hashed output code and said secondary hashed output code whereby said user is authenticated at said secondary server based on the results thereof.
2. The method of
4. The method of
5. The method of
9. The system of
12. The system of
(a) said secondary server being operable to receive ephemeral datum;
(b) said primary hash algorithm module for performing said hash function on said username, said hash key, and said ephemeral datum to produce said primary hashed output code; and
(c) said secondary hash algorithm module for performing said hash function on said username, said hash key, and said ephemeral datum to produce said secondary hashed output code.
13. The system of
(a) said secondary server being operable to receive optional parameters;
(b) said primary hash algorithm module for performing said hash function on said username, said hash key, and said optional parameters to produce said primary hashed output code; and
(c) said secondary hash algorithm module for performing said hash function on said username, said hash key, and said optional parameters to produce said secondary hashed output code.
15. The system of
(a) a system check module;
(b) said secondary server being operable to receive primary ephemeral datum from said primary server;
(c) said secondary server having secondary ephemeral datum; and
(d) said system check module being operable to compare said primary ephemeral datum to said secondary ephemeral datum.
16. The system of
17. The system of
(a) a plurality of secondary servers;
(b) each of said plurality of secondary servers being operable to receive said hash key;
(c) each of said plurality of secondary servers being operable to receive said username and said primary hashed output code; and
(d) each of said plurality of secondary servers including:
i. a secondary hash algorithm module having a hash function for generating a secondary hashed output code of said username utilizing said hash key; and
ii. a hashed output compare module being operable to compare said primary hashed output code and said secondary hashed output code whereby said user is authenticated at said secondary server based on the results thereof.
18. The system of
(a) a plurality of secondary servers which include said secondary server;
(b) each of said plurality of secondary servers being operable to receive a unique hash key;
(c) said primary hash algorithm module for performing a hash function on one or more usernames which include said username and each said unique hash key to produce a unique primary hashed output code for each unique hash key;
(d) each of said plurality of secondary servers being operable to receive a respective username of said one or more usernames and said unique primary hashed output code corresponding to the received unique hash key; and
(e) each of said plurality of secondary servers including:
i. a respective secondary hash algorithm module having a respective hash function for generating a unique secondary hashed output code of said respective username utilizing said unique hash key; and
ii. a respective hashed output compare module being operable to compare said unique primary hashed output code and said unique secondary hashed output code whereby said user is authenticated on at least one of the secondary servers based on the results thereof.
20. The method of
21. The method of
22. The method of
23. The method of
(a) receiving ephemeral data from the primary server at the secondary server; and
(b) wherein performing the hash algorithm at the secondary server on the username using the hash key to produce a secondary hashed output code further comprises utilizing the ephemeral data to perform the hash algorithm.
25. The method of
26. The method of
|
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction of the patent disclosure, as it appears in the Patent and Trademark Office patent files or records, but otherwise reserves all copyright rights whatsoever.
The present invention is directed to an efficient authentication method, apparatus, and/or system for primary and secondary servers and, more specifically, to an efficient authentication system for obtaining access to at least one secondary server without using a user account database.
One known basic authentication method for obtaining access to a software application and/or server is based on usernames and passwords being compared to entries stored in a user account database. At login, the user provides a username and a password. For purposes of this disclosure, the username and password are any two variables (e.g. numbers, letters, and/or characters) or strings of variables associated with the user. For example, the username could be selected by the user, could be assigned to the user, or could be a determinable variable (e.g. an e-mail address, a social security number, a phone number, a birth date, and coordinates). Similarly, the password could be selected by the user, could be assigned to the user, or could be a determinable variable (e.g. an e-mail address, a social security number, a phone number, a birth date, and coordinates). The username and password are sent to the server. The server permits the login if there is a match to the password stored in the user account database for the specified username.
Another known authentication method for obtaining access to a software application and/or server adds a hashing element. A hash (also called a “message digest”) is an output code (e.g. a string of numbers, letters, and/or characters) generated from input data (e.g. a password or code that may include a string of numbers, letters, and/or characters). The hashed output code is generally smaller than the input data, and is generated by a formula in such a way that it is extremely unlikely that some other input will produce the same hashed output code. A hash algorithm (or function) is a reproducible method that turns input data (e.g. a password or code) into an output code that may serve as a digital “fingerprint” of the input data. The hash algorithm changes (e.g. substitutes, transposes, calculates, and/or generates) the input data to create such fingerprints. In one known method, a hash algorithm is performed using a one-way cryptographic algorithm (i.e. it cannot be unencrypted), a hash key (a parameter to the algorithm), and an ephemeral datum (e.g. current time). Cryptographic hash algorithms add security properties so that the hashed output codes are suitable for use as a primitive in various information security applications, such as authentication. In a hash authentication method, the passwords are the input data that are hashed and stored in a user account database as hashed output codes. At login, the user inputs a username and a password. Using a hash algorithm, the password is hashed, preferably on the user's client device (e.g. computer), into a hashed output code (the hashed password). The username and the hashed password are sent to the server. The server permits the login if there is a match to the hashed password stored in the user account database for this username. One advantage of a hash authentication method is increased security. A hacker who monitors the data stream to the server, or who compromises the server database, will not be able to get the user's password. Further, the database administrator will not be able to discover the user's password even if he has the hashed output code.
One limitation of known authentication methods (e.g. the “basic authentication method” and the “hash authentication method”) is that there has to be a database of user accounts (e.g. usernames and passwords). In many applications and/or systems, provisioning this user account database is acceptable. Other applications and/or systems can leverage an existing user account database such as LDAP (Lightweight Directory Access Protocol). For some applications and/or systems, however, it is not desirable to provision a separate user account database. For example, in an application and/or system such as adding voice servers to existing applications like games, social networks, or collaboration platforms, it is not desirable to provision a separate user account database. One reason it may not be desirable to provision a separate user account database is because the voice server is provided as a service by a separate entity (e.g. company) than the game developer or provider of the social network or collaboration platform. Provision of a separate user account database to a separate entity may present security issues. Another reason it may not be desirable to provision a separate user account database is because of space (e.g. memory) issues. Yet another reason it may not desirable to provision a separate user account database is because of the bandwidth issues that arise when a massive amount of data is transmitted between systems.
The present invention is directed to an efficient authentication method, apparatus, and/or system for primary and secondary servers and, more specifically, to an efficient authentication system for obtaining access to at least one secondary server without using a user account database.
An efficient authentication method for providing a user access to a primary server and at least one secondary server includes the steps of: receiving a username, a password, and a hash key at the primary server; receiving the username and the hash key at the at least one secondary server; initially authenticating the user to the primary server based on the username and the password; performing a primary hash algorithm on the username and the hash key to produce a primary hashed output code; performing a secondary hash algorithm on the username and the hash key to produce a secondary hashed output code; comparing the primary hashed output code and the secondary hashed output code; and authenticating the user to the at least one secondary server based on the results thereof. The method may also include the step of providing the primary hashed output code to the at least one secondary server directly or indirectly (via a client device). It should be noted that these steps may be performed in alternative orders.
An efficient authentication system for primary and secondary servers for providing secure access to a user may include: a primary server and a secondary server. The primary server preferably has (which includes having access to) a primary hash algorithm module and an initial authentication module for authenticating the user based on a supplied username and password. The secondary server preferably has (which includes having access to) a secondary hash algorithm module and a hashed output compare module. The primary server and the secondary server are in a communicative relationship. The primary hash algorithm module performs a provided hash function on the username and a hash key to produce a primary hashed output code. The secondary hash algorithm module performs the same hash function on the username and the provided hash key to produce a secondary hashed output code. The hashed output compare module compares the primary hashed output code and the secondary hashed output code and authenticates the user based on the results thereof.
The foregoing and other objectives, features, and advantages of the invention will be more readily understood upon consideration of the following detailed description of the invention, taken in conjunction with the accompanying drawings.
The present invention is directed to an efficient authentication method, apparatus, and/or system for obtaining access to at least one application and/or server without requiring the use of a database of user accounts (e.g. usernames and passwords). The present invention (1) avoids the need for duplicating essentially the same user account database across multiple applications and/or servers, (2) avoids the need for trust between two separate companies, and (3) avoids the bandwidth to provision and de-provision user account databases on multiple applications and/or servers 20, 22.
As shown in
In the example shown in
An efficient authentication method, apparatus, and/or system of the present invention allows users 30 to input data components such as a username 32 (
It should be noted, however, that some of the features shown and discussed in one preferred embodiment may be implemented in another preferred embodiment. For example, the username 32 may be passed directly to the secondary server 22 by the client device 30′ or indirectly to the secondary server 22 via the primary server 20. It should also be noted that alternative preferred embodiments may combine elements of other preferred embodiments. For example, the primary hashed output code 50a may be passed directly from the primary server 20 to the secondary server 22 while the ephemeral datum 46 is passed indirectly from the primary server 20 to the secondary server 22 via the client device 30′ of the user 30. It should also be noted that some of the steps in the methods described above may be performed in alternative orders. For example, the username and the hash key may not be sent until just before the step of performing a secondary hash algorithm. The following paragraphs provide additional detail about the steps shown in
As discussed, the authentication method of the present invention provides secure access to a user 30 who provides a username 32 and a password 34 to the system to a primary server 20. Each time the user 30 logs in, he first logs into the primary server 20 using conventional authentication methods (e.g. the “basic authentication method” or the “hash authentication method”). In the shown embodiment, the primary server 20 has an initial authentication module 52 that receives the username 32 and password 34. The authentication module 52 compares the username 32 and password 34 with those stored in the user account database 54. The primary server 20 permits the login if there is a match (which may not be an exact match, but may be a match within predetermined tolerances) to the password 34 stored in the user account database 54 for the associated username 32. It should be noted that the user 30 may be logging into a primary server 20 over the Internet, via a LAN, or on his own client device 30′. It should be noted that exemplary client devices include computers, workstations, handheld technical devices (e.g. Pocket PC® devices, Palm® devices), interactive televisions, kiosks, dedicated devices, or virtually any current or future interactive technologies.
Next, the primary hash algorithm module 40a of the primary server 20 uses a hash (or message digest) algorithm such as SHA1, MD5, RIPEMD-160, HAVAL, Whirlpool or any other algorithm for which it is not feasible to find the input necessary to generate a particular hash output code (called “a preimage attack” in the art) to produce a primary hashed output code 50a from the username 32, the hash key 42, and preferably some ephemeral datum 46 (e.g. time, physical location, and/or virtual location).
As mentioned, the secondary server 22 receives several data components directly or indirectly (via the user's client device 30′) from the primary server 20, including the hash key 42, the username 32, and the primary hashed output code 50a. The secondary server 22 may also receive additional data components directly or indirectly (via the user's client device 30′) from the primary server 20 such as ephemeral datum 46 and optional parameters 48. Preferably, at least the hash key 42 is provided separately from the remainder of the data components as it is periodically updated. Although the remaining data is shown as being provided separately over separate paths, the data may be concatenated, appended, merged, or otherwise combined such that it is sent as a single transmission directly or indirectly from the primary server 20.
The login process for logging into the secondary server 22 uses the primary hashed output code 50a, the hash key 42, and his username 32 and, in some embodiments, uses the ephemeral datum 46 and optional parameters 48. The secondary hash algorithm module 40b of the secondary server 22 uses the same hash (or message digest) algorithm as that used in the primary hash algorithm module 40a to produce a secondary hashed output code 50b from the received data. The hashed output compare module 58 compares the primary hashed output code 50a to the secondary hashed output code 50b. If the primary hashed output code 50a and the secondary hashed output code 50b match (or are within a predetermined tolerance), the user is “authenticated” or logged into the secondary server 22 so that he is provided access to the secondary server 22 or provided services from the secondary server 22. Although ideally a primary hashed output code 50a and the secondary hashed output code 50b “match” exactly, an alternative preferred embodiment allows the hashed output codes 50a, 50b to match “within a predetermined tolerance.” This allows the system to take into consideration the possibility that some digits may be dropped intentionally and/or accidentally.
As mentioned, an optional step may be a system check performed for added security. The system check may be a timing check that is performed using a timing check module 60 (
The present invention may also be implemented in with multiple secondary servers 22. For example,
Another potential embodiment is to use an “authentication only” server to provide access to an arbitrary number of additional servers that provide the actual features. A dedicated authentication server can also be used to provide authentication services for servers for which it is inappropriate or unfeasible for it to maintain a user account database 54. Besides allowing for the addition of third party services to a primary service, it could also allow the authentication itself to be contracted to a third party specializing in authentication and account maintenance.
This efficient authentication method is secure because the hashed output code 50a, 50b is specific to the client device 30′ and/or the user 30 (the username 32), the hash key 42, ephemeral datum 46 (e.g. time, physical location, and/or virtual location), and the optional parameters 48 (e.g. the optional flags for features and privileges). Further, this method is secure because the user's password 34 is never sent between servers 20, 22. Further, this method is secure because the secondary server 22 can optionally allow a short window of time (timing check) in which the hashed output code 50a is still valid. Further, this method is secure because the secondary server 22 can permit or deny access to certain features based on authenticated data controlled by the primary server 20 using optional parameters 48.
The present invention does not have to be implemented at login and can be implemented at any time while the client device 30′ and/or the user 30 is logged into both servers 20, 22. For example, during game play, a primary server can directly or indirectly send authenticated virtual positions to the secondary server. In this preferred embodiment, instead of a username 32 (or in addition to the username 32), the coordinates are passed as input data and authenticated (hashed by the hash algorithms 40a, 40b and compared by the compare module 58). For example, at any time while the client device 30′ and/or the user 30 is logged into both servers 20, 22, features or parameter values can be denied or constrained by the primary server 20. For example, in a 3D voice environment, it is may not be desirable to allow a user 30 to set his coordinates to any point in a virtual world. Further, it may not be desirable to have the primary server 20 send all coordinate changes to the secondary server 22, since this is a duplication of the coordinate changes that the primary server 20 has to send to each user 30 (client device 30′). In this method, the primary server 20 can send a hashed output code 50a along with coordinate (or any other parameter) changes directly or indirectly to the secondary server 22. For example, in one embodiment the primary server 22 generates the coordinates, but if the server-server connection for coordinate changes is not feasible, the primary server 22 can send a hashed version of the coordinates to the user 30 (client device 30′) and the user 30 (client device 30′) would forward the hashed version of the coordinates to the secondary server 22. The hash of the coordinates prevents a user 30 from “cheating” by substituting his own coordinates. Optionally the secondary server 22 could allow for a range of coordinates (or values of other parameters) that will be accepted, so long as the current value is within X units (e.g. radius) of the authenticated coordinate value. This is another type of system check that could be implemented by check module 60 for example, if the coordinates are passed as ephemeral datum 46. Allowing a range or tolerance in the authenticated coordinate values would be advantageous if the client device 30′ is “interpolating,” and sending coordinates at a much higher rate so that the motion is smooth. Limiting the range or tolerance of the radius, however, prevents a client device 30′ that has been hacked by the user 30 from setting audio coordinates a mile away from the location specified by the primary server 20 with the intention of listening to someone else's conversation. This system check could be used to allow the primary server 20 to authenticate coordinate or other parameter updates less often (for example, once per second or every five seconds) because there is an allowed tolerance in the coordinates or other parameter updates.
The descriptions and applications herein are not to be construed as limiting the invention, but as examples and illustrations of the invention. It should be noted that the present invention may be implemented using operating systems including but not limited to Windows Vistas, Windows 95®, Windows 98®, Windows CE®, Windows Me®, Windows NT®, Windows2000®, Linux®, MacOS®, BeOS®, or virtually any current or future operating system. It should be noted that the present invention may be implemented using different types of technology including but not limited to computers, workstations, handheld technical devices (e.g. Pocket PC® devices, Palm® devices), interactive televisions, kiosks, dedicated devices, or virtually any current or future interactive technologies. It should be noted that a method of the present invention may be encoded on a computer (or other technology) readable medium.
It should be noted that relative terms (e.g. primary and secondary) are meant to help in the understanding of the technology and are not meant to limit the scope of the invention. It should be further noted that although the present invention is described in terms of modules (modular components) and data components, the terms are not meant to be limiting. For example, the hash key module 44 might include multiple processors and/or memory elements. Alternatively, the hash key module 44 might be combined with another modular component (e.g. the hash algorithm module 40a) such that a single modular component performs the function of the two “modules.” The terms “provide” and “providing” are meant to include standard means of provision including “transmit” and “transmitting,” but can also be used for non-traditional provisions as long as the data is “received” (which can also mean obtained).
Exemplary Code:
The following sections of code show one preferred implementation of the present invention. It should be noted, however, that the code is meant to be exemplary and not to limit the scope of the invention.
Hashlogin.h
/************************************************************
File:
hashlogin.h
Purpose:
Hashed authentication system demonstration
************************************************************/
#ifndef hashlogin_HEADER
#define hashlogin_HEADER
class PrimaryServer;
class SecondaryServer;
class Client;
class Client
{
public:
Client(void);
~Client(void);
// Simulate sending a message from primary server to user (client)
// giving the credentials (ephemeral datum, optional parameters,
// and primary hashed output code (in this case
// the client already knows its own username) for a login
void SetCredentials(SecondaryServer *server, _int64 timestamp,
char * params, unsigned char hash[ ]);
// Tell the user (client) to login to a primary server
void LoginToPrimaryServer(PrimaryServer * server);
};
class SecondaryServer
{
public:
SecondaryServer(void);
~SecondaryServer(void);
enum
{
KEY_MAXLEN = 128,
};
public:
// Simulate logging in to the secondary server using the
// hashed method of the present invention
bool HashLogin(Client *client, _int64 timestamp, char * username,
char * params, unsigned char hash[ ]);
// Simulates sending the hash (secret) key
// on a secondary server
void SetSecretKey(char * key);
private:
Client *mClient;
char mKey[KEY_MAXLEN];
public:
};
class PrimaryServer
{
public:
PrimaryServer(void);
~PrimaryServer(void);
// Simulates a user (client) logging in to the primary server
bool Login(char * username, char * password, Client * client);
// Tell the primary server about the secondary server
void SetSecondaryServer(SecondaryServer * server);
private:
Client * mClient;
SecondaryServer *mSecServer;
public:
};
#endif // ticket_HEADER
Primary Server
/******************************************************************************
File:
PrimaryServer.cpp
Purpose:
Implements primary server simulation
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include “hashlogin.h”
#include “ticket.h”
// Hash (secret) key shared between primary and secondary servers
char * secret_key = “secretkey”;
PrimaryServer::PrimaryServer(void)
{
}
PrimaryServer::~PrimaryServer(void)
{
}
// Simulates a user (client) logging in to the primary server
bool PrimaryServer::Login(char * username, char * password, Client * client)
{
bool rv = false;
if (strcmp(username, “Client”) == 0 && strcmp(password, “PrimaryPassword”) ==
0)
{
printf(“Client %s successfully logged into primary server.\n”, username);
// Successful login to primary server
mClient = client;
// Timestamp for login
time_t timestamp = time(NULL);
// Parameters describing quality and allowed optional features
char *params = “stereo canlisten canspeak codec=siren14”;
// Storage for the hash login value (Primary hashed output code)
unsigned char hash_ticket[ticket_LENGTH];
// Create the authentication hash
// Call the “Hash Algorithm Module 40a”
ticket_CreateLogin(timestamp, username, params, hash_ticket, secret_key);
// Give the secondary server credentials to the user (client)
mClient->SetCredentials(mSecServer, timestamp, params, hash_ticket);
rv = true;
}
return rv;
}
// Tell the primary server about the secondary server
void PrimaryServer::SetSecondaryServer(SecondaryServer * server)
{
mSecServer = server;
// Set the shared hash (secret) key for the secondary server
mSecServer->SetSecretKey(secret_key);
printf(“Primary server set the secret key for the secondary server\n”);
}
Secondary Server
/********************************************************
File:
SecondaryServer.cpp
Purpose:
Implements Secondary Server Simulation
********************************************************/
#include <stdio.h>
#include <time.h>
#include <string.h>
#include “hashlogin.h”
#include “ticket.h”
SecondaryServer::SecondaryServer(void)
{
}
SecondaryServer::~SecondaryServer(void)
{
}
// Simulate logging in to the secondary server using the
// hashed method of the present invention
bool SecondaryServer::HashLogin(Client *client, _int64 timestamp,
char * username, char * params, unsigned char hash[ ])
{
bool rv = false;
_int64 curtime = time(NULL);
// Allow 10 seconds for hash to be valid (timing check)
if (curtime − timestamp < 10)
{
unsigned char hash_ticket[ticket_LENGTH];
// Call the “Hash Algorithm Module 40b”
ticket_CreateLogin(timestamp, username, params, hash_ticket,
mKey); if (memcmp(hash, hash_ticket, sizeof(hash_ticket)) == 0)
{
// The hashes match; user authenticated
mClient = client;
printf(“User %s successfully authenticated on secondary
server\n”, username);
rv = true;
}
}
if (!rv)
{
printf(“User failed to log in to secondary server\n”);
}
return rv;
}
// Simulates setting the hash (secret) key on a secondary server
void SecondaryServer::SetSecretKey(char * key)
{
strncpy(mKey, key, KEY_MAXLEN−1);
mKey[KEY_MAXLEN−1] = ‘\0’;
}
Ticket.h
/***********************************************************
File:
ticket.h
Purpose:
Create and validate login tickets
***********************************************************/
#ifndef ticket_HEADER
#define ticket HEADER
#include “sha1.h”
#ifdef _cplusplus
extern “C” {
#endif
#define ticket _LENGTH sha1_HASHSIZE
/*----------------------------------------------------------------------------------
Create a ticket to be used for logging in
timestamp
- A Unix time_t widened to 64 bits
username
- UTF8 user name as null terminated string
params
- A string containing optional parameters
ticket
- Pointer to a ticket (will be filled in by this function)
key
- The MAC key (a NULL terminated string)
-----------------------------------------------------------------------------------*/
void ticket_CreateLogin(int64_t timestamp, const char *username,
const char *params,
unsigned char ticket[ticket_LENGTH],
const char *key);
#ifdef _cplusplus
}
#endif
#endif // ticket_HEADER
Ticket.c
/*****************************************************************************
File:
ticket.c
Purpose:
Create and validate login tickets. Uses HMAC as described in RFC2104
*****************************************************************************/
/*===================================================================
INCLUDES
===================================================================*/
#include <stdlib.h>
#include <string.h>
#include “ticket.h”
/*===================================================================
DEFINES
===================================================================*/
#define HMAC_PADLEN 64
#define HMAC_IPAD 0x36
#define HMAC_OPAD 0x5C
#define BUFFER_SIZE 2048
/*===================================================================
DATA
===================================================================*/
/*===================================================================
CODE
===================================================================*/
*/-----------------------------------------------------------------------------------------------------------------
Compute sha1-based HMAC on a message
-----------------------------------------------------------------------------------------------------------------*/
static void hmacshal(unsigned char *msg, int msglen,
const unsigned char *key, int keylen, unsigned char *digest)
{
sha1_HANDLE shalhan;
unsigned char k_ipad[HMAC_PADLEN + 1]; // Inner padding − key XORd with ipad
unsigned char k_opad[HMAC_PADLEN + 1]; // Outer padding − key XORd with opad
unsigned char tk[Sha1_HASHSIZE];
int i;
sha1han = sha1_Create( );
// If a key is longer than 64 bytes reset it to key = SHA1(key)
if (keylen > 64)
{
sha1_Reset(sha1han);
sha1_Input(sha1han, key, keylen);
shal Result(sha1han, tk);
key = tk;
keylen = sha1_HASHSIZE;
}
// Store the key in the pads
memset(k_ipad, 0, sizeof(k_ipad));
memset(k_opad, 0, sizeof(k_opad));
memcpy(k_ipad, key, keylen);
memcpy(k_opad, key, keylen);
// XOR key with ipad and opad value
for (i = 0; i < HMAC_PADLEN; i++)
{
k_ipad[i] {circumflex over ( )}= HMAC_IPAD
k_opad[i] {circumflex over ( )}= HMAC_OPAD
}
// Perform inner SHA1
sha1_Reset(sha1han);
sha1_Input(sha1han, k_ipad, HMAC_PADLEN);
sha1_Input(sha1han, msg, msglen);
sha1_Result(sha1han, digest);
// Perform outer SHA1
sha1_Reset(sha1han);
sha1_Input(sha1han, k_opad, HMAC_PADLEN);
sha1_Input(sha1han, digest, sha1_HASHSIZE);
// Finish up the second pass
sha1_Result(sha1han, digest);
}
*/----------------------------------------------------------------------------------------------------------------
Concatenate a zero terminated text string onto a buffer and return the new
position at the end of the buffer.
----------------------------------------------------------------------------------------------------------------*/
static char * ConcatBuffer(char *start, char *end, const char *source)
{
int len = strlen(source) + 1;
if (start + len < end)?
{
memcpy(start, source, len);
}
return start + len;
}
// This function implements both modules 40a and 40b using the
// algorithm HMAC-SHA-1
*/----------------------------------------------------------------------------------------------------------------
Create a ticket to be used for logging in
----------------------------------------------------------------------------------------------------------------*/
void ticket_CreateLogin(int64_t timestamp, const char *username, const
char *params,
unsigned char ticket[ticket_LENGTH],
const char *key)
{
char sourcebuf[BUFFER_SIZE];
char *pos = sourcebuf;
char *end = sourcebuf + BUFFER_SIZE;
memset(sourcebuf, 0, sizeof(sourcebuf));
memcpy(pos, ×tamp, sizeof(timestamp));
pos += sizeof(timestamp);
pos = ConcatBuffer(pos, end, username);
pos = ConcatBuffer(pos, end, params);
hmacsha1(sourcebuf, BUF FER_SIZE, key, strlen(key), (unsigned char *)ticket);
}
The terms and expressions that have been employed in the foregoing specification are used as terms of description and not of limitation, and are not intended to exclude equivalents of the features shown and described or portions of them. The scope of the invention is defined and limited only by the claims that follow.
Weiner, Keith, Rowe, Charles, Scott, Frederick H.
Patent | Priority | Assignee | Title |
11369886, | Jun 13 2017 | Nintendo Co., Ltd. | Communication system, server, and information-processing method |
11537739, | Jun 29 2020 | NATIONAL APPLIED RESEARCH LABORATORIES | System and method for analyzing confidential data |
11865462, | Jun 13 2017 | Nintendo Co., Ltd. | Communication system, server and information-processing method |
11900306, | Jul 05 2017 | United Parcel Service of America, Inc | Verifiable parcel distributed ledger shipping and tracking system |
11922363, | Jul 05 2017 | United Parcel Service of America, Inc. | Counterparty physical proximity verification for digital asset transfers |
8335991, | Jun 11 2010 | Microsoft Technology Licensing, LLC | Secure application interoperation via user interface gestures |
9203839, | Sep 23 2013 | Foundation of Soongsil University-Industry Cooperation | User authentication method and apparatus |
9935767, | Dec 15 2014 | Malikie Innovations Limited | Secure storage |
Patent | Priority | Assignee | Title |
5497421, | Apr 28 1992 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method and apparatus for protecting the confidentiality of passwords in a distributed data processing system |
5689566, | Oct 24 1995 | Network with secure communications sessions | |
6161185, | Mar 06 1998 | Verizon Patent and Licensing Inc | Personal authentication system and method for multiple computer platform |
6339423, | Oct 23 1999 | Entrust Corporation | Multi-domain access control |
6668322, | Aug 05 1999 | Oracle America, Inc | Access management system and method employing secure credentials |
6920559, | Apr 28 2000 | VALTRUS INNOVATIONS LIMITED | Using a key lease in a secondary authentication protocol after a primary authentication protocol has been performed |
6996718, | Apr 21 2000 | AT&T Corp. | System and method for providing access to multiple user accounts via a common password |
7055032, | Dec 19 2000 | VMWARE, INC | One time password entry to access multiple network sites |
7089585, | Aug 29 2000 | Microsoft Technology Licensing, LLC | Method and system for authorizing a client computer to access a server computer |
7194764, | Jul 10 2000 | ORACLE, USA; Oracle International Corporation; Oracle Corporation | User authentication |
7197765, | Dec 29 2000 | Intel Corporation | Method for securely using a single password for multiple purposes |
7210163, | Jul 19 2002 | Fujitsu Limited | Method and system for user authentication and authorization of services |
7210169, | Aug 20 2002 | Intel Corporation; INTEL CORPORATION A DELAWARE CORPORATION | Originator authentication using platform attestation |
7370351, | Mar 22 2001 | EMC IP HOLDING COMPANY LLC | Cross domain authentication and security services using proxies for HTTP access |
20020157017, | |||
20030028495, | |||
20030105981, | |||
20040015724, | |||
20040249961, | |||
20050177750, | |||
20070016663, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
May 04 2007 | Avaya Inc. | (assignment on the face of the patent) | / | |||
May 04 2007 | SCOTT, FREDERICK H | DIAMONDWARE, LTD | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019292 | /0274 | |
May 04 2007 | ROWE, CHARLES | DIAMONDWARE, LTD | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019292 | /0274 | |
May 04 2007 | WEINER, KEITH | DIAMONDWARE, LTD | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 019292 | /0274 | |
Dec 18 2009 | DIAMONDWARE, LTD | AVAYA Inc | MERGER SEE DOCUMENT FOR DETAILS | 025023 | /0804 | |
Jan 29 2010 | AVAYA Inc | CITICORP USA, INC , AS ADMINISTRATIVE AGENT | SECURITY AGREEMENT | 023905 | /0001 | |
Jan 29 2010 | AVAYA Inc | CITIBANK, N A , AS ADMINISTRATIVE AGENT | SECURITY AGREEMENT | 023892 | /0500 | |
Feb 11 2011 | AVAYA INC , A DELAWARE CORPORATION | BANK OF NEW YORK MELLON TRUST, NA, AS NOTES COLLATERAL AGENT, THE | SECURITY AGREEMENT | 025863 | /0535 | |
Mar 07 2013 | Avaya, Inc | BANK OF NEW YORK MELLON TRUST COMPANY, N A , THE | SECURITY AGREEMENT | 030083 | /0639 | |
Jan 24 2017 | AVAYA INTEGRATED CABINET SOLUTIONS INC | CITIBANK, N A , AS ADMINISTRATIVE AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 041576 | /0001 | |
Jan 24 2017 | Octel Communications Corporation | CITIBANK, N A , AS ADMINISTRATIVE AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 041576 | /0001 | |
Jan 24 2017 | VPNET TECHNOLOGIES, INC | CITIBANK, N A , AS ADMINISTRATIVE AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 041576 | /0001 | |
Jan 24 2017 | AVAYA Inc | CITIBANK, N A , AS ADMINISTRATIVE AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 041576 | /0001 | |
Nov 28 2017 | CITIBANK, N A | OCTEL COMMUNICATIONS LLC FORMERLY KNOWN AS OCTEL COMMUNICATIONS CORPORATION | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 041576 0001 | 044893 | /0531 | |
Nov 28 2017 | CITIBANK, N A | AVAYA INTEGRATED CABINET SOLUTIONS INC | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 041576 0001 | 044893 | /0531 | |
Nov 28 2017 | CITIBANK, N A | AVAYA Inc | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 041576 0001 | 044893 | /0531 | |
Nov 28 2017 | THE BANK OF NEW YORK MELLON TRUST COMPANY, N A | AVAYA Inc | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 030083 0639 | 045012 | /0666 | |
Nov 28 2017 | CITIBANK, N A | AVAYA Inc | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 023892 0500 | 044891 | /0564 | |
Nov 28 2017 | CITIBANK, N A | VPNET TECHNOLOGIES, INC | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 041576 0001 | 044893 | /0531 | |
Nov 28 2017 | THE BANK OF NEW YORK MELLON TRUST, NA | AVAYA Inc | BANKRUPTCY COURT ORDER RELEASING ALL LIENS INCLUDING THE SECURITY INTEREST RECORDED AT REEL FRAME 025863 0535 | 044892 | /0001 | |
Dec 15 2017 | AVAYA INTEGRATED CABINET SOLUTIONS LLC | CITIBANK, N A , AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045124 | /0026 | |
Dec 15 2017 | OCTEL COMMUNICATIONS LLC | CITIBANK, N A , AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045124 | /0026 | |
Dec 15 2017 | ZANG, INC | GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045034 | /0001 | |
Dec 15 2017 | ZANG, INC | CITIBANK, N A , AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045124 | /0026 | |
Dec 15 2017 | VPNET TECHNOLOGIES, INC | GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045034 | /0001 | |
Dec 15 2017 | OCTEL COMMUNICATIONS LLC | GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045034 | /0001 | |
Dec 15 2017 | AVAYA INTEGRATED CABINET SOLUTIONS LLC | GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045034 | /0001 | |
Dec 15 2017 | AVAYA Inc | CITIBANK, N A , AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045124 | /0026 | |
Dec 15 2017 | AVAYA Inc | GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045034 | /0001 | |
Dec 15 2017 | CITICORP USA, INC | SIERRA HOLDINGS CORP | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 045045 | /0564 | |
Dec 15 2017 | CITICORP USA, INC | Avaya, Inc | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 045045 | /0564 | |
Dec 15 2017 | VPNET TECHNOLOGIES, INC | CITIBANK, N A , AS COLLATERAL AGENT | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 045124 | /0026 | |
Sep 25 2020 | AVAYA INTEGRATED CABINET SOLUTIONS LLC | WILMINGTON TRUST, NATIONAL ASSOCIATION | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 053955 | /0436 | |
Sep 25 2020 | INTELLISIST, INC | WILMINGTON TRUST, NATIONAL ASSOCIATION | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 053955 | /0436 | |
Sep 25 2020 | AVAYA MANAGEMENT L P | WILMINGTON TRUST, NATIONAL ASSOCIATION | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 053955 | /0436 | |
Sep 25 2020 | AVAYA Inc | WILMINGTON TRUST, NATIONAL ASSOCIATION | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 053955 | /0436 | |
Jul 12 2022 | AVAYA Inc | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 061087 | /0386 | |
Jul 12 2022 | AVAYA CABINET SOLUTIONS LLC | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 061087 | /0386 | |
Jul 12 2022 | AVAYA MANAGEMENT L P | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 061087 | /0386 | |
Jul 12 2022 | INTELLISIST, INC | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 061087 | /0386 | |
Apr 03 2023 | CITIBANK, N A , AS COLLATERAL AGENT | AVAYA Inc | RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 45124 FRAME 0026 | 063457 | /0001 | |
Apr 03 2023 | CITIBANK, N A , AS COLLATERAL AGENT | AVAYA INTEGRATED CABINET SOLUTIONS LLC | RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 45124 FRAME 0026 | 063457 | /0001 | |
Apr 03 2023 | CITIBANK, N A , AS COLLATERAL AGENT | AVAYA MANAGEMENT L P | RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 45124 FRAME 0026 | 063457 | /0001 | |
Apr 03 2023 | CITIBANK, N A , AS COLLATERAL AGENT | AVAYA HOLDINGS CORP | RELEASE OF SECURITY INTEREST IN PATENTS AT REEL 45124 FRAME 0026 | 063457 | /0001 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | CAAS TECHNOLOGIES, LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | AVAYA MANAGEMENT L P | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA Inc | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 53955 0436 | 063705 | /0023 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | INTELLISIST, INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 53955 0436 | 063705 | /0023 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | HYPERQUALITY II, LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA INTEGRATED CABINET SOLUTIONS LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 53955 0436 | 063705 | /0023 | |
May 01 2023 | AVAYA Inc | AVAYA LLC | SECURITY INTEREST GRANTOR S NAME CHANGE | 065019 | /0231 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA MANAGEMENT L P | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 53955 0436 | 063705 | /0023 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | HYPERQUALITY, INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | ZANG, INC FORMER NAME OF AVAYA CLOUD INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | INTELLISIST, INC | WILMINGTON SAVINGS FUND SOCIETY, FSB [COLLATERAL AGENT] | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063742 | /0001 | |
May 01 2023 | KNOAHSOFT INC | WILMINGTON SAVINGS FUND SOCIETY, FSB [COLLATERAL AGENT] | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063742 | /0001 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA MANAGEMENT L P | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 61087 0386 | 063690 | /0359 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA Inc | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 61087 0386 | 063690 | /0359 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | INTELLISIST, INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 61087 0386 | 063690 | /0359 | |
May 01 2023 | WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT | AVAYA INTEGRATED CABINET SOLUTIONS LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 61087 0386 | 063690 | /0359 | |
May 01 2023 | AVAYA Inc | CITIBANK, N A , AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063542 | /0662 | |
May 01 2023 | AVAYA MANAGEMENT L P | CITIBANK, N A , AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063542 | /0662 | |
May 01 2023 | INTELLISIST, INC | CITIBANK, N A , AS COLLATERAL AGENT | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063542 | /0662 | |
May 01 2023 | AVAYA MANAGEMENT L P | WILMINGTON SAVINGS FUND SOCIETY, FSB [COLLATERAL AGENT] | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063742 | /0001 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | AVAYA Inc | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | INTELLISIST, INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | AVAYA INTEGRATED CABINET SOLUTIONS LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | OCTEL COMMUNICATIONS LLC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | GOLDMAN SACHS BANK USA , AS COLLATERAL AGENT | VPNET TECHNOLOGIES, INC | RELEASE OF SECURITY INTEREST IN PATENTS REEL FRAME 045034 0001 | 063779 | /0622 | |
May 01 2023 | AVAYA Inc | WILMINGTON SAVINGS FUND SOCIETY, FSB [COLLATERAL AGENT] | INTELLECTUAL PROPERTY SECURITY AGREEMENT | 063742 | /0001 |
Date | Maintenance Fee Events |
Apr 27 2011 | ASPN: Payor Number Assigned. |
Sep 10 2014 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Oct 02 2018 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Nov 28 2022 | REM: Maintenance Fee Reminder Mailed. |
May 15 2023 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Apr 12 2014 | 4 years fee payment window open |
Oct 12 2014 | 6 months grace period start (w surcharge) |
Apr 12 2015 | patent expiry (for year 4) |
Apr 12 2017 | 2 years to revive unintentionally abandoned end. (for year 4) |
Apr 12 2018 | 8 years fee payment window open |
Oct 12 2018 | 6 months grace period start (w surcharge) |
Apr 12 2019 | patent expiry (for year 8) |
Apr 12 2021 | 2 years to revive unintentionally abandoned end. (for year 8) |
Apr 12 2022 | 12 years fee payment window open |
Oct 12 2022 | 6 months grace period start (w surcharge) |
Apr 12 2023 | patent expiry (for year 12) |
Apr 12 2025 | 2 years to revive unintentionally abandoned end. (for year 12) |