home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
vb_tools
/
r_key
/
regkey.txt
< prev
next >
Wrap
Text File
|
1994-06-05
|
211KB
|
4,706 lines
R E G K E Y
-----------------------------------------------------------------------------
Version 3.10
Registration Key System For Programmers
Programmer's Manual
NOTE: Since you will probably want to refer to this manual while working
with RegKey, it would be a good idea to take a few minutes to print
it. To print this manual on any printer, simply type COPY
REGKEY.TXT PRN from the DOS Prompt, or choose the FILE|PRINT option
from the Windows File Manager, selecting the REGKEY.TXT file.
(C) Copyright Brian Pirie, 1993 - 1994. All Rights Reserved.
-----------------------------------------------------------------------------
TABLE OF CONTENTS
-----------------------------------------------------------------------------
TABLE OF CONTENTS.................................................2
PART 1: INTRODUCTION..............................................3
PART 2: ABOUT YOUR EVALUATION COPY AND REGISTERING................5
THE DEMO VERSION & BENEFITS OF REGISTERING...................5
HOW TO ORDER.................................................7
FILLING OUT THE REGISTRATION FORM............................8
RECEIVING YOUR ORDER BY CONVENTIONAL MAIL....................8
RECEIVING YOUR ORDER BY A CALL TO YOUR BBS...................9
RECEIVING YOUR ORDER BY CALLING THE REGKEY BBS...............9
RECEIVING YOUR ORDER BY INTERNET EMAIL.......................9
RECEIVING YOUR ORDER BY FIDONET CRASHMAIL...................10
SENDING YOUR ORDER FEE......................................11
ORDERING THE SOURCE CODE....................................13
REGKEY 3.10 ORDER FORM......................................15
REGKEY 3.10 USER FEEDBACK FORM..............................16
TERMS OF REGISTRATION AND SOURCE CODE USE...................17
PART 3: USING THE REGKEY SYSTEM..................................18
A QUICK TOUR OF REGKEY......................................18
INTRODUCTION TO REGISTRATION KEYS...........................21
PRINCIPLES OF THE REGKEY SYSTEM.............................23
FILE-BASED VS. USER-ENTERED REGISTRATION KEYS...............25
USING THE KEYGEN PROGRAM....................................27
CREATING GENERATION/VALIDATION CODE SETS....................29
GENERATING REGISTRATION KEYS................................31
VALIDATING REGISTRATION KEYS WITHIN YOUR PROGRAM............34
METHODS FOR ADDING EXPIRY INFORMATION.......................37
SECURITY ISSUES.............................................40
TROUBLESHOOTING GUIDE.......................................44
PART 4: LANGUAGE-SPECIFIC INFORMATION............................47
USING THE REGKEY SYSTEM WITH C OR C++.......................47
USING THE REGKEY SYSTEM WITH QUICKBASIC.....................56
USING THE REGKEY SYSTEM WITH VISUAL BASIC...................62
USING THE REGKEY SYSTEM WITH TURBO PASCAL...................63
USING REGKEY WITH OTHER LANGUAGES OR OPERATING SYSTEMS......70
PART 5: ADDITIONAL INFORMATION...................................71
GETTING HELP................................................71
CONTENTS OF PACKAGE.........................................73
REVISION HISTORY............................................76
GLOSSARY....................................................78
INDEX.......................................................83
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 2
-----------------------------------------------------------------------------
PART 1: INTRODUCTION
-----------------------------------------------------------------------------
**NOTE** RegKey is now distributed in separate packages for each programming
language. Be sure that you have the RegKey package which
corresponds to the programming language that you are using. For
information on obtaining the newest version of any of the RegKey
packages, please see page 71.
RKEY31C.ZIP C/C++ (DOS & Windows) version of RegKey
RKEY31TP.ZIP Turbo Pascal (DOS & Windows) version of RegKey
RKEY31QB.ZIP QuickBASIC version of RegKey
RKEY31VB.ZIP VisualBasic (Windows) version of RegKey
Welcome to RegKey, the registration key system for programmers!
RegKey is designed to allow you to quickly and easily add advanced
registration key capabilities to your software. If you are
unfamiliar with the concept of registration keys, see page 20 of
this manual for an introduction to the subject.
Among the unique features provided by RegKey are the following:
- RegKey is compatible with a wide variety of programming
languages and operating systems. This manual provides specific
instructions for using RegKey with C compilers from Microsoft,
Borland and Mix Software (for both DOS and Windows applications
when supported by the compiler), Microsoft QuickBASIC, Microsoft
Visual Basic for Windows, and Borland Turbo Pascal (both DOS and
Windows versions). In addition, you can also use RegKey with
many other programming languages, compilers and operating
systems. For more information on using RegKey in environments
not explicitly discussed in this manual, see page 70.
- RegKey is designed to be very flexible. For instance, RegKey
supports both file-based and user-entered registration keys. In
the first case, the registration key takes the form of a small
file that is placed in your application's working directory. In
the second case, the registration key takes the form of a twenty
digit code that the user enters into your application or
configuration program.
RegKey also gives you full control of any differences in your
application's behavior between registered and unregistered
modes. For example, you may elect to have your application
display a short "please register" message at startup when
operating in unregistered mode. Alternatively, you may decide to
make additional feature of your program available after the user
has registered. You might also decide prevent your program from
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 3
being used after a certain period of time if a valid
registration key has not been provided.
- Every application that uses RegKey chooses its own set of
numerical codes that RegKey uses to generate and validate
registration keys. This means that you can use RegKey for as
many different applications as you wish, requiring different
registration keys for each program.
- RegKey is designed so that it is virtually impossible for
someone to generate counterfeit registration keys for your
software. The numerical code required to generate your
registration keys is different from the corresponding code used
to validate your registration keys. Since only the validation
code is included in your program's executable file, the secret
numerical code used to generate your registration keys cannot be
discovered by reverse-engineering your program. It is
mathematically infeasible for someone to determine your
generation code from the corresponding validation code.
- For added security, RegKey uses 96-bit registration keys.
Because most compilers and programming languages only support
32-bit arithmetic, registration keys are most often no greater
than 32-bits in size. While creating a registration key system
that supports 96-bit registration keys involves much more work
(creating RegKey has involved writing routines to perform
operations as basic as adding, multiplying and dividing two
numbers), it makes it virtually impossible to determine a
registration key by an exhaustive search.
- The source code for RegKey is also available. This presents no
security threat to those using RegKey due to the nature of the
algorithms used by RegKey. Even knowing how RegKey works in
great detail does not make it any easier to generate counterfeit
registration keys for an application using RegKey.
- Included with RegKey is an example program that demonstrates how
you can make use of the RegKey system. This manual also provides
a tutorial on how you can best use RegKey, and discusses some of
the issues you may want to consider.
- RegKey is very low-priced. For only $30 Canadian Dollars, $24
U.S. Dollars, or your country's equivalent, you are entitled to
unlimited use of this and all future versions of RegKey. For an
additional $30CDN/$24US/equivalent, you may also receive the
RegKey source code.
If you are using RegKey to encourage people to pay for your
software, RegKey will quickly pay for itself!
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 4
-----------------------------------------------------------------------------
PART 2: ABOUT YOUR EVALUATION COPY AND REGISTERING
-----------------------------------------------------------------------------
THE DEMO VERSION & BENEFITS OF REGISTERING
-----------------------------------------------------------------------------
RegKey is distributed on a try-before-you-buy basis. If you wish to
continue using RegKey after an initial one month evaluation period,
or if you wish to distribute programs using RegKey, you must pay to
register it.
The complete RegKey package is freely distributed, and can be
freely used for evaluation purposes. All the features and
capabilities of RegKey are enabled in the RegKey package that you
have. However, prior to registering, you may only use RegKey under
the following conditions:
1.) RegKey may only be used for a period up to one month, and only
for evaluation purposes prior to registering.
2.) Programs using an unregistered copy of RegKey may not be
distributed.
Also, when unregistered, RegKey will display a message to the user
indicating that RegKey is not registered. This message is, of
course, removed when RegKey is registered.
If you decided to purchase RegKey, you will become the owner of a
powerful tool for adding registration key capabilities to your
software. Registered owners of RegKey are entitled to:
1.) Unlimited use of RegKey. You may write as many programs as you
wish using RegKey, and do what you please with these programs.
There are no additional royalty fees for using RegKey.
2.) You will also continue to be registered for all future versions
of RegKey for all programming languages.
The best news of all is the low price of RegKey. This version of
RegKey costs only $30 Canadian Dollars, $24 U.S. Dollars, or the
equivalent in your country's currency. As was pointed out before,
if you are using RegKey to encourage people to pay for your
software, RegKey will quickly pay for itself! (This price will
probably go up for future versions. By registering now, you will
save by being able to use all future versions free of charge.)
Many people also elect to receive the RegKey source code package.
The source code for RegKey is available to registered owners for
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 5
only an additional $30 Canadian / $24 U.S. / equivalent. With the
RegKey source code, you will be able to customize it for your own
purposes, port it to other operating systems or programming
languages, learn about how RegKey works, or increase the security
of RegKey by adding your own anti-hacking mechanisms. For more
information on ordering the RegKey source code, see page 13.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 6
HOW TO ORDER
-----------------------------------------------------------------------------
To order your RegKey registration and/or source code package,
simply fill out the order form located on page 15 of this manual,
and mail it along with your cheque or money order to the address
listed on the order form. The following section is intended to
answer any questions that you may have about ordering RegKey. If
you have any additional questions or uncertainties about your
registration, please feel more than free to contact me. For
information on how to contact me, please see page 71 of this
manual.
For more information on filling out the order form, see page 8.
For more information on sending your order fee, see page 11.
For more information on ordering the source code, see page 13.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 7
FILLING OUT THE REGISTRATION FORM
-----------------------------------------------------------------------------
If you have printed the RegKey manual, you can simply remove and
mail the forms on pages 15 and 16. If you have not already printed
a copy of the manual, and you have a printer, you can quickly print
these forms by printing the ORDER.FRM file included in the RegKey
distribution archive. To do this, type COPY ORDER.FRM PRN from your
DOS prompt. If you are working with Microsoft Windows, select the
ORDER.FRM file and choose the File|Print command from within the
Windows File Manager.
If you do not have a printer, simply send a handwritten version of
the order form.
If you have any special instructions for me, or anything that you
would like to say when you register, feel free to write this on the
back of the registration form, or on a separate sheet of paper.
When filling out the RegKey registration form, be sure to indicate
how you would prefer to receive your RegKey registration key and/or
source code. The following options are available:
- Having me send the registration and / or source code by
conventional mail
- Internet E-Mail
- FidoNet "CrashMail"
- Having me call to your BBS
- You calling the RegKey support BBS
Once you have decided which means you would prefer to receive your
order by, please read the detailed instructions on your order
method, below. Also, if you are ordering the source code, please be
sure to read the section on ordering the source code, which begins
on page 13.
-----------------------------------------------------------------------------
RECEIVING YOUR ORDER BY CONVENTIONAL MAIL
To receive your RegKey registration key and/or source code by
conventional mail, simply fill out the order form and mail it along
with your payment as described below.
If you are ordering the source code, it will be sent to you on a 3-
1/2 inch disk unless you specifically request a 5-1/4 inch disk.
Because of their smaller size and greater durability, 3-1/2 inch
disks are the preferred format for mailing.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 8
-----------------------------------------------------------------------------
RECEIVING YOUR ORDER BY A CALL TO YOUR BBS
Since many programmers operate bulletin board systems to provide
support for their software, you may elect to receive your RegKey
registration and/or source code by a message and/or upload on your
BBS. In order to do this, fill out the order form and mail it along
with your payment as described below. Be sure to include the phone
number, baud rate, and my login and password for the BBS to which
you would like me to call. I will cover any long distance costs. If
for some reason I am unable to connect to your BBS, I will send
your order by conventional mail instead.
-----------------------------------------------------------------------------
RECEIVING YOUR ORDER BY CALLING THE REGKEY BBS
You may choose to receive your RegKey registration and/or source
code by calling the RegKey BBS after your registration form and
order fee have been received here. If you are unable to receive
your order by any other electronic means (such as a call BBS to
your BBS, or by electronic mail), this may be the quickest way for
you to receive your registration information and/or source code.
The obvious disadvantage with this option is that you will have to
estimate when your order will arrive here in order to receive it as
quickly as possible. You may end up calling the RegKey BBS more
than once before your order has arrived. After your order form has
arrived, your registration key and/or source code will be placed on
hold for you, and you will be able to receive it on your first call
to the BBS. The phone number of the BBS is:
+1 613 526 4466
-----------------------------------------------------------------------------
RECEIVING YOUR ORDER BY INTERNET EMAIL
If you wish to receive your RegKey registration key by Internet E-
Mail (including Internet E-Nail to a CompuServe account), fill out
the order form and mail it along with your payment as described
below. Be sure to include your e-mail address on your order form.
Note that the source code cannot be sent by Internet e-mail.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 9
-----------------------------------------------------------------------------
RECEIVING YOUR ORDER BY FIDONET CRASHMAIL
To receive your RegKey registration key and/or source code by
FidoNet CrashMail, simply fill out the order form and mail it along
with your payment as described below. Be sure to include the
FidoNet node address to which you wish to have your registration
key and/or source code sent to (by CrashMail). Again I will cover
any long distance costs. If, for some reason, I am unable to
connect to your FidoNet system, I will send your order by
conventional mail instead.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 10
SENDING YOUR ORDER FEE
-----------------------------------------------------------------------------
The price of RegKey is 30 Canadian Dollars, 24 U.S. Dollars, or
equivalent for the registration. The source code costs an
additional 30 Canadian Dollars, 24 U.S. Dollars, or equivalent. For
your convenience, the equivalent value in a number of other
country's currencies (at the time of this writing) is listed below:
-----------------------------------------------
REGISTRATION
REGISTRATION ONLY AND SOURCE CODE
-----------------------------------------------
30 Canadian Dollars 60 Canadian Dollars
24 US Dollars 48 US Dollars
15 British Pounds 30 British Pounds
130 French Francs 260 French Francs
38 German Marks 76 German Marks
43 Netherlands Gilders 86 Netherlands Gilders
34 Australian Dollars 68 Australian Dollars
-----------------------------------------------
This order fee may be paid using any of the following methods:
- Cheque or Money Order in Canadian currency, drawn upon a
Canadian bank. In this case, your order fee will be either
$30CDN for just the registration, or $60CDN for both the
registration and source code.
- Cheque or Money Order in U.S. currency, drawn upon a U.S. bank.
In this case, your order fee will be either $24US for just the
registration, or $48US for both the registration and source
code.
- An International Money Order or International Bank Draft
(available from your bank, post office or organization such as
American Express), in Canadian currency. Depending on the
particular case, your order fee MAY be sent to me by the postal
service, and you will mail your order form by itself. You should
have the money order drawn in either $30CDN for just the
registration, or $60CDN for both the registration and source
code.
- A cheque drawn on any bank in the world, IN THAT COUNTRY'S
CURRENCY, equivalent to $30 Canadian dollars for just the
registration or $60 for both the registration and source code.
For instance, a cheque for the appropriate number of British
Pounds, drawn on a British bank, is perfectly acceptable.
However, I am unable to accept a cheque for $30 Canadian
dollars, drawn on a British Bank.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 11
- Cash. Cash orders are also accepted, but it is your
responsibility to get that cash to me safely. Please note that
it is not usually recommended that cash be sent in the mail, and
that I cannot be responsible for any cash lost in the mail.
I would like to mention that many people have already ordered
RegKey by sending cash, and I have yet to run across any case of
cash being lost in the mail. Nonetheless, if you wish to send
cash, you may wish to consider doing so by registered mail, for
your added security.
If you are ordering RegKey from within Canada, you will most likely
choose the first option (a Canadian cheque or money order). If you
are ordering RegKey from within the United States, you will most
likely choose the second option (an American cheque or money
order). If you are ordering from outside Canada and the U.S., it
would be ideal if you could send your fee by an international money
order. However, any of the above order methods will be acceptable
from any location. Also, it is quite possible that I may be able to
accept other means of sending your order fee. If you are unsure
about sending your order fee, please feel free to get in touch with
me by any of the means listed on page 71.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 12
ORDERING THE SOURCE CODE
-----------------------------------------------------------------------------
Many people who register RegKey also choose to order the source
code package. With the RegKey source code, you will be able to
customize it for your own purposes, port it to other operating
systems or programming languages, learn about how RegKey works, or
increase the security of RegKey by adding your own "anti-hacking"
mechanisms.
As mentioned before, the RegKey source code may be ordered for an
additional $30 Canadian Dollars, $24 U.S. Dollars, or the
equivalent in your country's currency. The source code may be
ordered either at the same time you register RegKey, or separately.
If you wish to order the RegKey source code, simply check the
appropriate box on the order form, and include the additional fee
for ordering the source code. When you order the RegKey source
code, you will receive it either on a diskette, or electronically,
depending upon how you chose to receive your order. (For more
information on these options, see the section that begins on page
8.)
Also, as with your RegKey registration, when you order the RegKey
source code, you are entitled to receive all future versions of the
source code. Whenever you wish to receive an updated version of the
source code package, you can either download it from the RegKey
support BBS, or send $3 dollars to cover the cost of postage and a
diskette to my address.
The RegKey source code package includes both the core source code
of RegKey itself, and the source code for the DOS and Windows
version of the KeyGen program. RegKey itself is written in ANSI-
compliant C, and is designed to be easily ported to other platforms
or operating systems. In addition to the C source code for RegKey,
you will receive optimized 80x86 assembly language source code for
some of the RegKey routines. Since the equivalent C source code is
included for all assembly language routines, use of the assembly
language source code is optional. However, the assembly language
routines provide dramatically improved performance. The RegKey
source code has been compiled with C compilers from both Microsoft
and Borland. The source code package also includes a basic test
program that exercises various components of the RegKey source
code, and can help you in locating problems when porting RegKey to
other platforms.
The KeyGen source code is divided into three components - a core
module common to both DOS and Windows version, a module containing
the DOS-specific interface code, and a module containing the
Windows-specific interface code. The source code for the common
module is again written in ANSI-compliant C. The DOS-specific
interface code is also written in ANSI-compliant C, but contains
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 13
many MS-DOS specific elements. The Windows-specific interface code
is written in C++, and uses the "Microsoft Foundation Classes"
interface to the Windows operating system. The Microsoft Foundation
Classes library is included with recent C++ compilers from
Microsoft and others.
For information on what you are permitted to do with the RegKey
source code, see the terms and conditions on page 17.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 14
--------------------------------------------------------------------------
REGKEY 3.10 ORDER FORM
--------------------------------------------------------------------------
YOUR NAME : _______________________________ (AS SHOULD APPEAR IN
REGISTRATION)
POSTAL ADDRESS : ______________________________________________________
______________________________________________________
VOICE PHONE NUMBER : ______________________
EMAIL ADDRESSES : ____________________________________ (IF APPLICABLE)
I WISH TO RECEIVE MY ORDER BY:
___ ___
| | - CONVENTIONAL MAIL | | - FIDONET "CRASHMAIL"
|___| |___|
___ ___
| | - CALL TO MY BBS | | - INTERNET E-MAIL
|___| (INCLUDE NECESSARY INFO) |___| (REGISTRATION KEY ONLY)
___
| | - CALL TO REGKEY BBS
|___|
___
I WOULD LIKE TO ORDER: | | - JUST MY REGISTRATION KEY
|___| ($30 CDN, $24US, OR EQUIVALENT)
___
| | - JUST THE SOURCE CODE (ONLY IF ALREADY
|___| REGISTERED) ($30 CDN, $24 US, OR EQUIVALENT)
___
| | - BOTH REGISTRATION KEY AND SOURCE CODE
|___| ($60 CDN, $48 US, OR EQUIVALENT)
I AGREE TO THE REGKEY TERMS, SET ____________________________
FORTH ON PAGE 17 OF THE MANUAL (SIGNATURE)
MAKE CHEQUES PAYABLE TO: BRIAN PIRIE
APT. 1416 - 2201 RIVERSIDE DR.
OTTAWA, ONTARIO
CANADA
K1H 8K9
+-- OFFICIAL USE ONLY ----------------------------------------------- V --+
| |
| Rcvd : _______ Date : _________ S.N. : _________ Key : _____________ |
+-------------------------------------------------------------------------+
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 15
--------------------------------------------------------------------------
REGKEY 3.10 USER FEEDBACK FORM
--------------------------------------------------------------------------
YOUR NAME : _______________________________
POSTAL ADDRESS : ______________________________________________________
______________________________________________________
VOICE PHONE NUMBER : ______________________
EMAIL ADDRESSES : ____________________________________ (IF APPLICABLE)
HOW DID YOU FIRST LEARN OF OR RECEIVE REGKEY?
____________________________________________________________
WHICH LANGUAGE / COMPILER AND VERSION ARE YOU USING? (EG. BORLAND C++ 3.10)
____________________________________________________________
WHAT DO YOU LIKE MOST ABOUT REGKEY?
____________________________________________________________
____________________________________________________________
____________________________________________________________
WHAT CHANGES OR ADDITIONS WOULD YOU LIKE TO SEE IN FUTURE VERSIONS?
____________________________________________________________
____________________________________________________________
____________________________________________________________
DO YOU HAVE ANY ADDITIONAL COMMENTS?
____________________________________________________________
____________________________________________________________
----------------------------------------------------------------------------
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 16
TERMS OF REGISTRATION AND SOURCE CODE USE
-----------------------------------------------------------------------------
When you purchase a RegKey registration and/or source code package,
you are entitled to almost unlimited use of all versions of RegKey.
However, in order to protect my investment of time and effort in
developing RegKey, you must also agree to the terms outlined below
when purchasing a RegKey registration and/or the source code. These
terms are very reasonable, and are in no way intended to cripple
your use of RegKey. The primary intent of these terms is that you
are not permitted to disclose your RegKey registration information,
or the RegKey source code, to other individuals. The terms of
registration and source code use are as follows:
For the purpose of these terms, "RegKey" is defined to be the
library files, header files, example programs and programmer's
manual of all versions, present and future, for all languages and
platforms, of the RegKey registration key system. Upon registering
RegKey, the individual or organization named on the registration
form (the registree) is entitled to use of all versions of RegKey,
within the terms set forth below. Violation of these terms will be
considered copyright infringement, and grounds for the termination
of the registration agreement. The registree is entitled, at no
additional cost, to use, distribute or sell the executable (.EXE,
.COM, .DLL) files that result from using the RegKey toolkit. The
registree is also entitled to use, distribute or sell the example
programs or portions thereof. If purchasing the source code, the
registree is also entitled to distribute any executable files that
result from using altered versions of the source code, or portions
thereof. The registree is NOT entitled to distribute the
registration key number presented to them at registration, except
when imbedded in the executable files of a program which uses
RegKey. The registree is not permitted to distribute any portion of
the RegKey source code. For the purposes of these terms, an
organization is considered to be a company or non-profit
organization. If the registree is an organization, the registration
key and source code may be shared among members of the
organization, under the condition that these individuals are using
the registration and/or source code only for official activities of
that organization.
These terms in no way suggest an agreement on the part of Brian
Pirie to develop any future versions of RegKey, or fix any problems
in current versions of RegKey. RegKey is offered "as is", and no
warrantees are expressed or implied. In no event shall Brian Pirie
be liable for any loss of profit or any other damage, including but
not limited to special, incidental, consequential or other damages.
This means that it is solely the registree's responsibility to
determine the suitability of RegKey for the registree's
application(s). This also means that no guarantees are made
concerning the portability or compatibility of the RegKey system.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 17
-----------------------------------------------------------------------------
PART 3: USING THE REGKEY SYSTEM
-----------------------------------------------------------------------------
This portion of the manual contains information about RegKey that
is common to all languages supported by RegKey. Part 4 of this
manual, which begins on page 47, provides information specific to
each programming language supported by RegKey.
The following sections describe the basic principles of the RegKey
system, provide step-by-step information on how to incorporate
RegKey into your applications, and discuss some of the issues that
you will want to consider when using RegKey. This information is
divided into the following sections:
A Quick Tour of RegKey......................................18
Introduction to Registration Keys...........................20
Principles of the RegKey System.............................23
File-Based vs. User-Entered Registration Keys...............25
Using the KeyGen program....................................27
Creating Generation/Validation Code Sets....................29
Generating Registration Keys................................31
Validating Registration Keys................................34
Methods for Adding Expiry Information.......................37
Security Issues.............................................40
A QUICK TOUR OF REGKEY
-----------------------------------------------------------------------------
This section provides a quick overview of the RegKey package, and
is intended for those who want to see RegKey in action before
reading the detailed information in the following sections. This
section does not attempt to explain the use of the RegKey package
in detail, but simply guides you on a tour of some of the programs
and files included in the RegKey package. If at any point you want
to learn more about RegKey, or are having trouble understanding a
particular concept, you can skip to the following sections of this
manual for a more detailed tutorial. You may also find the glossary
on page 78 and the troubleshooting guide on page 44 useful.
The RegKey package provides two distinct facilities for
implementing registration keys within your applications. The first
facility is used for generating registration keys, typically when a
user purchases your software. This facility is generally used only
by yourself or those responsible for selling your application.
Registration keys can be generated using the KeyGen utility
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 18
included in the RegKey package, or you may write a custom program
to manage the generation of registration keys.
The second facility provided by RegKey is incorporated into your
program itself, and is used to check the validity of registration
keys at run time. Although the details of this facility vary
depending upon the programming language you are using, they always
involve calling a RegKey function/procedure that performs the
actual registration key validation. You are then able to adjust the
behavior of your program depending upon the result returned by
RegKey. This provides you with the option of displaying a special
message when the user is not registered, disabling certain features
when operating in unregistered "demo" mode, or limiting the length
of time someone may use your software before paying for it.
Included with RegKey is a very simple demonstration program, named
DemoApp, which allows you to test RegKey and learn how to use
RegKey within your own programs. The RegKey package includes both
MS-DOS and MS-Windows executable versions of DemoApp - DEMOAPPD.EXE
and DEMOAPPW.EXE. The RegKey package also includes the equivalent
source code for DemoApp in the C, C++, Turbo Pascal, QuickBASIC and
Visual Basic languages. To get a better idea of how RegKey's
registration key validation facility can be incorporated into your
program, have a look at the version of the DemoApp source code for
the language you are most familiar with. Also, you should try
running DemoApp to see how it behaves before you generate a
registration key for it.
As mentioned before, you can generate RegKey registration keys
using the KeyGen utility. To start the DOS version of KeyGen, type
the KEYGEND command at the DOS prompt, while located in the
directory where you have placed the RegKey files. To start the
Windows version of KeyGen, you can double-click on the KEYGENW.EXE
file from within the Windows File Manager. If you are using the
Windows version of KeyGen, the included CTL3DV2.DLL file should be
MOVED to your Windows system directory. (You may also wish to add
KeyGen to a group within the Windows Program Manager. For
instructions on how to do this, see page 27.) Once you have started
the KeyGen program, you will see a list of applications for which
you can generate a registration key. Initially, there should be a
single application listed: "DemoApp (RegKey Example Program". To
generate a registration key for DemoApp, simply select it from the
list of applications, and choose the "Generate Key" option. A
second dialog box will appear, with which you can provide
information on the registration key to generate. Enter your name as
the "Registration String", and enter any combination of 10 numbers
and upper-case letters as the "Random Seed". "Registration String"
is usually the name of the individual or organization that has
purchased your software. The "Random Seed" is used by RegKey during
the registration key generation process, and is then discarded. You
should enter a different random seed for each key you generation.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 19
To generate a registration key for DemoApp, you do not need to
change any other options in the key generation dialog box. When you
select "OK", KeyGen will generate a registration key file for
DemoApp, and will then ask you whether you wish to generate another
registration key.
RegKey supports both file-based and user-entered-string
registration keys. With file-based registration keys, the
registered user receives a small "key file" which is recognized and
read by the application at run-time, in order to determine whether
to operate in registered mode. With user-entered-string keys, the
user enters their name and a 20 digit registration key into the
application, which causes it to operate in registered mode.
The DemoApp example program included with RegKey uses file-based
registration keys. Now that you have generated a registration key
file for RegKey, you can try running DemoApp again. Ensure that the
newly generated key file, (named ????????.KEY, unless you changed
the default option in the key generation dialog box), is located in
the default directory before staring DemoApp. DemoApp will now
operate in registered mode, and will display the registered user
name you entered when generating the registration key.
Congratulations! You have successfully completed your tour of
RegKey. The following sections provide you with more detailed
information on using RegKey, and part 4 provides information
specific to using RegKey with each of the supported languages.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 20
INTRODUCTION TO REGISTRATION KEYS
-----------------------------------------------------------------------------
This section provides an introduction to registration keys for
those who are unfamiliar with the concept. If you are already
familiar with the notion behind registration keys, you may wish to
proceed to the following section, "Principles of the RegKey
System", on page 23.
Registration keys are a form of software protection; they are a
mechanism to encourage users to pay for your software or even
prevent them from using it without paying for it. Registration keys
are often used as an only means of software protection, although
they can easily be combined with other mechanisms for added
security and effectiveness. Unlike other forms of software
protection, such as software copy protection or hardware keys,
registration keys are ideal for shareware or "try-before-you-buy"
software. Using registration keys, you have the ability to
distribute a single copy of your software that serves as both the
demonstration version and "full" version.
The idea behind registration keys is simple. When a customer pays
for your software, they receive a registration key - either in the
form of a small additional file or a numeric code - which switches
the software into registered mode. The differences between
registered and unregistered modes can be as insignificant or as
great as you choose. The software may simply display a "please
register" message when unregistered, it may only work for a short
evaluation period prior to registering, additional features may be
enabled after registering, or the software may refuse to operate
entirely before registration.
While the use of registration key systems is not limited to
shareware applications, this is where registration keys are most
often used. Many of the advantages of the shareware approach to
software marketing are obvious - the user has the opportunity to
try the software before buying it, the software producer is able to
reach a wide audience of potential customers, and it is often a
low-cost approach to software marketing. In general, there are two
approaches to shareware marketing. In the first approach, a special
demonstration version of the software is freely distributed to
users, and when the user registers they receive the "full"
registered version of the software. With the registration key
approach, only one version of the software is released. This
version normally operates in "unregistered" or "demo" mode.
However, when the user pays for the software, they receive a
registration key which immediately causes the software to switch
into "registered" mode. Of these two approaches, the registration
key approach has become very popular for a number of reasons:
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 21
- It has proven highly effective in encouraging people to pay for
the software.
- Since the registration key is associated with a single user's
name, it discourages illegal sharing of the registration. People
are more likely to give away a copy of a generic registered
version of the software than they are to share the registration
key that is associated with only their name. Although it is
possible to "brand" each registered copy of the software for
each user who registers, this often proves to be a great deal of
work.
- Registration keys enable the user to easily switch the software
into registered mode upon registering, without having to
reinstall a registered version of the software.
- Registration keys also allow the option of upgrading to a new
version by receiving a widely available copy of the software,
rather than having to receive a new registered copy directly
from the author.
- If user-entered registration keys are used (see page 25 for a
comparison between user-entered and file-based registration
keys), the registration key can be quickly transmitted to the
user by phone, email, fax or conventional mail, rather than
sending a registered version of the entire software package.
In addition to shareware applications, registration keys can be
useful for many other software protection applications. For
instance, registration keys can be used in implementing pay-per-use
software, where a new registration key is sent to the user when
they pay for additional use of the software. Registration keys can
also be just as useful in discouraging the copying of non-shareware
software as it is for encouraging registration of shareware
software. Registration keys can also form the basis of multi-user
site licensing systems. Although this manual cannot explicitly deal
with all of the potential uses of the RegKey system, it does
attempt to provide general information that will be of use
regardless of how you are using RegKey.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 22
PRINCIPLES OF THE REGKEY SYSTEM
-----------------------------------------------------------------------------
This section provides an introduction to the concepts and
terminology used by RegKey. The remainder of this manual assumes
that you have read this section.
A registration string and corresponding registration key is
associated with each person who pays to register your software. The
registration string uniquely identifies the individual or
organization that has registered, and may contain other information
that should not be tampered with. In many cases, the registration
string will only be the user's name, but it may also include
information such as the registration's expiry date or the version
of your software that was registered. (For more help on how to add
expiry information to registration keys, see the section that
begins on page 37.) In general, the registration string contains
information that the user knows before registering, for which your
application must be able to recognize your "stamp of approval".
One of the key features of RegKey is the fact that every
application using RegKey requires different registration keys; a
particular user's registration key that is accepted by one
application using RegKey will not work with a different application
using RegKey. For each application or version for which you wish to
require different registration keys, a unique generation /
validation code set is created. Choosing a different generation/
validation code set results in different registration keys being
generated and accepted for the same registration string.
The secret generation code is used to generate registration keys
for your applications. The generation code is only known by
yourself or people responsible for generating registration keys for
your application; the generation code would never appear in your
program's executable file(s). Every generation code has a
corresponding validation code. This validation code is used during
your application's execution in order to determine whether the
supplied registration string (such as the user's name) corresponds
to the supplied registration key. If the registration key is valid
for the registration string and validation code, RegKey indicates
to your application that it should operate in registered mode. The
validation code is contained within your program's executable
files. Although it may be possible to determine this validation
code by "hacking" your program's executable files, there is no
known feasible way to calculate the generation code knowing this
validation code. Therefore, knowing the validation code does not
permit someone to generate counterfeit registration keys for your
software.
The registration string and registration key may either be entered
directly into your application by the user, or may both be stored
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 23
in a registration key file. The first approach is referred to as
user-entered registration keys, and the second approach is referred
to as file-based registration keys. The following section of this
manual discusses the advantages and disadvantages of each approach.
Subsequent sections of this manual discuss how to use the
facilities provided by RegKey to create a generation/validation
code set for a new application, how to generate a registration key
for a user when they pay for your software, and how to use RegKey
to deal with registration keys within your application itself.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 24
FILE-BASED VS. USER-ENTERED REGISTRATION KEYS
-----------------------------------------------------------------------------
RegKey provides support for two types of registration keys: "user-
entered" and "file-based". For a given application, you must choose
which of these two types you wish to use.
With user-entered registration keys, upon registering the user
receives a 20 digit code of numbers and letters, such as:
F8T5CQ7LFVXDY6TSC4QU
To avoid confusion when copying the registration key, RegKey does
not use the letters G, I, O, S, as they may be confused with the
numerals 6, 1, 0 and 5. If the user accidentally enters any of
these letters in place of the corresponding number, RegKey knows
that the number was intended, as treats the letter as being
equivalent to the number. Likewise, RegKey only uses upper-case
letters when generating registration keys, but is not sensitive to
case when validating registration keys.
When they pay for your software, the user would typically be
required to enter this 20-digit code along with their name (the
registration string) into your application or configuration
program, for example:
Your Name : Brian Pirie
Your Registration Key : F8T5CQ7LFVXDY6TSC4QU
This information would then be stored by your program in a data
file, for access when the program is subsequently executed. Using
RegKey, your application could then determine whether or not a
valid registration key for the user's name has been presented, and
act accordingly.
When file-based registration keys are used, rather than receiving a
20 digit code, the user receives a file in electronic form, which
they either manually copy to the application's working directory,
or install using a simple installation program that you provide.
When your application executes, it would then call upon RegKey to
read this file and determine whether or not a valid registration
key file is present. If RegKey indicates that this file is present
and valid, your program would know to operate in registered mode.
User-entered and file-base registration keys each provide different
advantages and disadvantages. User-entered registration keys have
the advantage that no disk or electronic file needs to be sent to
the registered user. This allows you full flexibility to send the
registration key by conventional mail, electronic mail, facsimile
or over the telephone. The RegKey registration key format is
specifically designed to be easy to transmit by this means. It's
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 25
use of both letters and numbers makes it a very compact and
efficient representation for the 96-bits of information it
contains, while its choice of numbers and upper case letters helps
to reduce the possibility of mis-copying the string.
File-based registration keys, on the other hand, may be easier for
the user. Rather than having to enter the registration key and
related information manually, the user simply needs to install an
additional small file. File-based registration keys may also be
preferable if the registration string contains more information
than simply the user's name. This might be the case when you are
imbedding expiry information in the registration string as
described in the section which begins on page 37.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 26
USING THE KEYGEN PROGRAM
-----------------------------------------------------------------------------
The RegKey package includes both DOS and Windows versions of a
program called "KeyGen". KeyGen can be used for both creating a
generation/validation code set for a new application and for
quickly generating registration keys for one or more of your
applications. KeyGen also provides password security facilities to
control access to the registration key generation information that
it stores. This section provides some basic information on how to
setup, maintain and navigate through the KeyGen program. Later
sections of this manual provide information on how to accomplish
specific tasks using KeyGen, such as creating a new code set or
generating a registration key for a new user.
To start the DOS version of KeyGen, simply go to the RegKey
directory and type KEYGEND from the DOS prompt.
The Windows version of KeyGen requires Microsoft Windows version
3.1 or later. Before using the Windows version of KeyGen, you must
MOVE the CTL3DV2.DLL file to your Windows system directory. To
start the Windows version of KeyGen, you may simply double-click on
the KEYGENW.EXE file, from within in the Windows File Manager.
KEYGENW.EXE will be located in the same directory where you have
placed your other RegKey files.
Rather than starting up KeyGen from the Windows file manager, you
may prefer to add KeyGen to one of your Windows program manager
groups. To do this, select the existing group to which you wish to
add KeyGen, or create a new program manager group. Now choose
FILE|NEW|PROGRAM ITEM. In the "Properties" dialog box, enter
"KeyGen" as the description, enter the full path to the KEYGENW.EXE
file as the command line, and enter the directory where KEYGENW.EXE
is located as the working directory. Now choose "OK" to add KeyGen
to the current program manager group. You will now be able to start
KeyGen by double-clicking on the KeyGen icon. The KeyGen icon
appears as a diskette with a golden key in front of it. (This
information applies to using KeyGen with MS-Windows versions 3.x.
If you are using MS-Windows version 4.0 or later, refer to your
Windows manual for information on executing a Windows application
given the filename).
If you are using an operating system other and MS-DOS or MS-Windows
which has the ability to execute DOS or Windows programs (such as
OS/2), see your operating system manual(s) for information on how
to do this. The filename of the DOS version of KeyGen is
KEYGEND.EXE, and the filename of the Windows version of KeyGen is
KEYGENW.EXE.
The DOS and Windows versions of KeyGen operate very similarly to
one another. Both can be used with either keyboard or mouse (or
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 27
similar pointing device such as a trackball or pen), and both
provide an identical layout of Windows and dialog boxes. When using
a pointing device to navigate through KeyGen, simply point to the
item you wish to change or activate, and press the pointing device
button. When using a keyboard to navigate through KeyGen, use the
[Tab] key to move among items, and press [Enter] or [Spacebar] to
activate items.
The DOS and Windows version of KeyGen also share the same data
file, KEYGEN.DAT. If you are relying on KeyGen to store the
generation/validation code sets for your applications, this file is
very sensitive. Be careful to control access to this file. You
should also be absolutely certain that you maintain backups of this
file in the case of hardware failure, fire, accidental erasure,
etc.
The main KeyGen window displays a list of applications for which it
can generate registration keys. When you first install the RegKey
package, only one application will be listed - the RegKey test
program. When you write your own application that uses RegKey, you
can add that program to the list by choosing the "Add Application"
option (see page 29). To generate a registration key for one of the
applications on the list, simply select the application and choose
the "Generate Key" option (see page 31). To obtain or alter
information concerning an application, such as the type of
registration key generated or the generation/validation code set,
select the application and choose the "Application Info" option. To
remove an unwanted application from the list, select the
application and choose the "Delete Application" option. When you
are finished with KeyGen, choose the "Close" option. Only one copy
of KeyGen should be running at any time.
KeyGen also provides you with the option of password protecting
applications. You can enter a password for an application when you
add it using the "Add Application" option, or you can
add/alter/remove a password using the "Application Info" option.
When a password has been entered for an application, that password
will be required to generate a registration key for the application
or to access or alter the information pertaining to that
application.
Once again, be sure to maintain a backup copy of your KEYGEN.DAT
file.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 28
CREATING GENERATION/VALIDATION CODE SETS
-----------------------------------------------------------------------------
As is introduced in "Principles of the RegKey System" on page 23,
for each application that uses RegKey you must create a
generation/validation code set. It is the uniqueness of this code
set that make the registration keys for one of your applications
different from those for any other program using RegKey. The secret
generation code is required to generate registration keys for a
specific application. The validation code is used when checking the
validity of the registration key at application run time.
The RegKey API provides a function / procedure named
RegKeyNewCodeSet(), that can be used to create a
generation/validation code set for a new application. However, the
quickest and easiest way to create a new code set is to use the
KeyGen program included in your RegKey package. KeyGen also stores
the new code set in its data file for your future reference. If you
would prefer to write your own program that generates a code set
using the RegKeyNewCodeSet() function/procedure, see the
information on calling RegKeyNewCodeSet() in the section of part 4
that deals with the programming language you are using.
The RegKey generation and validation codes are both represented as
ten digit strings of numbers and upper-case letters. Although it is
mathematically possible for the validation code to be calculated
from the generation code, the reverse is not true; there is no easy
way to calculate the generation code given the validation code.
Therefore, the process of creating a new code set involves RegKey
calculating a validation code from a generation code that you
provide.
To create a code set for a new application (or version), start the
KeyGen utility as described on page 27. Select "New Application" to
create a new code set, in order to bring up the "New Application"
dialog box. Enter the name of the application for which you will be
generating a new code set. This name is not used as part of the
code set generation process; it is simply used by KeyGen to
distinguish between code sets if you generate more than one.
Next, enter the 10 character generation code for which a
corresponding validation code will be calculated. These two codes
will form the new code set. The generation code you enter should
consist of numbers and upper case letters, and should be different
for each of your applications.
KeyGen gives you the option of protecting the new code set with a
password. This password can prevent other people who have access
to your computer or data files from unauthorized access to the new
generation/validation code set. KeyGen will also require this
password to be entered before a new registration key can be
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 29
generated for your application. If you choose to enter a password,
note that it will not appear when typed. Be very careful to note
the spelling and capitalization of the password you choose; the
password will have to be entered identically in the future. The
best passwords are between six and twelve characters in length.
Remember that the password you enter has no effect on the actual
validation code that is generated - it only controls access to that
information when stored within KeyGen.
The "New Application" dialog box also allows you to indicate
whether your application will be using user-entered or file-based
registration keys. Again, this information does not affect the
actual generation/validation codes. This setting only controls the
type of registration key that KeyGen will create, if you choose to
use KeyGen to generate registration keys for your application (see
"Generating Registration Keys" on page 31). For information on the
benefits of file-based vs. user-entered registration keys, see
"File-Base vs. User-Entered Registration Keys" on page 25.
Once you have entered the relevant information into the "New
Application" dialog box, choose "OK" to calculate the validation
code that corresponds to the generation code you entered. The
generation and validation codes will now be stored in the KeyGen
data file, KEYGEN.DAT. To view the generation and validation codes
for a particular application, select that application in the main
KeyGen window, and choose the "Application Info" option. If you
have password protected the selected application, KeyGen will
prompt for the application's password before displaying any
information about the selected application.
When you create a generation/validation code set for a new
application, you should always write these codes down in a safe
location. Otherwise, if the KeyGen data file is lost or damaged,
you could loose the ability to generate registration keys for your
own software!
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 30
GENERATING REGISTRATION KEYS
-----------------------------------------------------------------------------
You will typically generate a registration key once for each user,
when they pay for your software. Registration keys may either be
generated using the KeyGen program included in your RegKey package,
or they may be generated using your own utility which in turn calls
upon RegKey to perform the actual registration key generation. You
will most likely choose to generate registration keys using the
KeyGen program. However, if you wish to integrate the registration
key generation process with another program (such as an on-line
registration system or an order entry system), you may perform key
generation by calling a RegKey API function/procedure. For general
information on using the KeyGen program, see the section which
begins on page 27. For information on calling RegKey API
functions/procedures from your programming language, see part four
of this manual, which begins on page 47.
If you are generating a registration key using the KeyGen program,
first start up KeyGen as described in the section which begins on
page 27. Next select the application for which you wish to generate
a registration key, and choose the "Generate Key" option. The key
generation dialog box will now appear on your screen. This dialog
box is used to provide information about the registration key to be
generated. (If you have not yet added information about your
application to the KeyGen program, it will not appear on the list
of available applications. In this case, see "Creating
Generation/Validation Code Sets" on page 29.)
When generating a registration key, you MUST SUPPLY at least the
following two pieces of information:
A. The registration string, which is usually the user's name
B. A ten digit alphanumeric random seed
Depending upon your circumstances, the following information MAY
ALSO BE REQUIRED:
C. If you are using KeyGen to generate the registration key for a
password protected application, this password must be entered
to generate a registration key.
D. If you are writing your own key generation utility, that
utility must specify the generation code for your application.
(If you are using KeyGen , it automatically provides this
information for the application you selected.)
E. When generating a file-base registration key, you may specify
the filename to be used for the new registration key.
To elaborate:
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 31
A. The registration string is usually the user's name, but may
also contain other information, such as registration key expiry
data. For more information on the registration string, see
"Principles of the RegKey System" on page 23.
B. In order to generate a registration key, RegKey requires a ten
character alphanumeric string which it uses as a simple random
number seed. If this string includes more than ten character,
the additional characters are ignored. A different random seed
should be chosen for each registration key that is generated.
C. If you are using KeyGen to generate the registration key, and
you have entered a password for the selected application, this
password must be entered. The password portion of the key
generation dialog box is enabled if and only if a password is
required for this application. Note that the password will not
appear on the screen when it is typed. If an incorrect password
is entered, KeyGen will refuse to generate the registration
key.
D. If you are writing your own key generation utilit y, that
utility must specify the generation code for your application.
The ten digit generation code is passed as a string to the
registration key generation function. For information on
creating a generation code, see "Creating Generation/Validation
Code Sets" on page 29. (If you are using KeyGen to generate the
registration key, it automatically provides the generation code
for the application you selected.)
E. If you are generating a file-based registration key, you may
optionally specify the registration key filename to be used. If
you do not specify a filename, RegKey will default to using the
first eight alphabetical characters in the registration string,
with a .KEY extension. For instance, the default filename for
the registration string "Brian Pirie" would be "BRIANPIR.KEY".
Likewise, for the registration string "1-2-3 Clocks", the
default filename would be "CLOCKS.KEY". If the registration
string does not contain any alphabetical characters, the
default filename is "REGISTER.KEY". If you explicitly specify a
registration key filename, that filename may optionally include
a path to the directory where the registration key file should
be created. If no path/filename is specified, the current
directory is used by default.
CAVEAT: If a registration key file already exists with the
specified filename, it will be overwritten by the new one.
If you are using KeyGen to generate the registration key, choosing
"OK" will cause a registration key to be generated, based upon the
information entered. If the "OK" button of the key generation
dialog box is not enabled, be sure that you have specified a
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 32
registration string, a valid 10-digit random seed, and a password
if required. When generating user-entered registration keys, the
generated registration key will be displayed in a separate dialog
box. You will now have the option of either generating another
registration key for the current application, or returning to the
main KeyGen window. When generating a file-based registration key,
the registration key file will be created and another dialog box
will appear indicating whether or not you wish to generate
additional registration keys for the current application.
If you are generating registration keys from within your own
program, key generation is performed by one of the following two
functions/procedures:
RegKeyGenerate()
RegKeyFileGenerate()
The first function/procedure is used to generate user-entered
registration keys, and the second is used to generate file-base
registration keys. The registration string, generation code, random
seed and other information required for key generation is passed
directly to one of these functions/procedures. In the case of
RegKeyGenerate(), the 20 character registration key is returned to
your program. In the case of RegKeyFileGenerate(), the new
registration key file is created.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 33
VALIDATING REGISTRATION KEYS WITHIN YOUR PROGRAM
-----------------------------------------------------------------------------
In order to provide registration key validation capabilities, a
portion of RegKey is linked into the executable (.EXE, .COM, .DLL,
etc.) file of your application. The actual process for linking
RegKey with your program varies depending upon the programming
language you are using. For more information on doing this with a
particular language, consult Part Four of this manual (which begins
on page 47) and/or your language's manual(s).
To cause the registration key validation to be performed, you call
one of two RegKey functions/procedures, depending upon whether you
are using user-entered or file-based registration keys. These
functions/procedures are as follows:
RegKeyValidate() - For user-entered registration keys
RegKeyFileValidate() - For file-based registration keys
The registration key validation code for your application is passed
to either RegKeyValidate() or RegKeyFileValidate() as a ten
character alphanumeric string. If RegKeyValidate() is being used,
the registration string and registration key are also passed to the
function. In the case that RegKeyFileValidate() is being used, the
registration key filename and string where the registration string
should be stored are passed to the function/procedure. In addition,
a variable is passed to RegKeyValidate()/ RegKeyFileValidate()
which will be set to indicate whether your program should operate
in registered or unregistered mode. Based on how RegKey sets this
variable, you can adjust the behavior of your program as you wish.
Both of these functions return a value indicating whether or not
they executed successfully.
The RegKeyValidate() function requires the following parameters, in
order:
sRegString The registration string to be validated. This
sting can consist of up to either 65,535
characters, or the maximum size of strings in
your programming language, whichever is less.
sRegKey A twenty character string containing the
registration key to be validated against the
registration string.
sValidationCode A ten character string containing your
applications validation code.
sYourName A string containing your name, if you have
registered RegKey. Otherwise, this should be an
empty string.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 34
nYourKey A long integer containing your RegKey
registration key if you have registered RegKey.
Otherwise
peRegistered The variable where the result o f registration
key validation should be stored. Indicates
whether the program should operate in registered
or unregistered mode. See section four of this
manual for the possible values of peRegistered
in your programming language.
Hence, a typical call to the RegKeyValidate() function might appear
as follows (in no particular programming language):
result = RegKeyValidate( theRegistrationString,
theRegistrationKey,
myValidationCode,
"A RegKey Programmer",
0,
isRegistered)
The RegKeyFileValidate() function requires the following
parameters, in order:
sFileName The filename or file specification of the
registration key file. If this string is empty,
*.KEY is used. You will likely want to specify
the path to your application's main directory,
where the registration key file would usually be
installed by the user. For instance, sFileName
might be "C:\MYAPP\*.KEY".
sValidationCode A ten character string containing your
applications validation code.
sYourName A string containing your name, if you have
registered RegKey. Otherwise, this should be an
empty string.
nYourKey A long integer containing your RegKey
registration key if you have registered RegKey.
Otherwise
sRegString A string where the registration string (e.g.
user's name) retrieved from the registration key
file will be stored. If no valid registration
key file was located, RegKey will return an
empty string in this variable.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 35
cbMaxStringSize The maximum size of the registration string,
expressed in the string size conventions used by
the host programming language. In C or C++
programs, this should contain the number of
bytes allocated for the string and the string
termination character. In Pascal, this should be
the number of characters specified when the
string was declared, or 255 if no size was
specified. In BASIC, this specifies the maximum
number of characters that RegKey should retrieve
for the registration string. For variable-length
strings in QuickBASIC, this can be any value
between 1 and 255. For variable-length strings
in Visual Basic, this can be any value between 1
and 30,000.
peRegistered The variable where the result of registration
key validation should be stored. Indicates
whether the program should operate in registered
or unregistered mode. See section four of this
manual for the possible values of peRegistered
in your programming language.
Hence, a typical call to the RegKeyFileValidate() function might
appear as follows (in no particular programming language):
result = RegKeyFileValidate( "*.KEY",
myValidationCode,
"A RegKey Programmer",
0,
registrationString,
50,
isRegistered)
Typically, you will store the value returned in the peRegistered
parameter in one or more global variables, that will be accessible
at any time your program needs to know whether it is operating in
registered or unregistered mode. There are no limitations on how
you adjust your program's behavior between registered and
unregistered modes.
For an example of how to perform registration key validation within
your programming language, see the source code for the DemoApp
example program. The RegKey package includes equivalent source code
of DemoApp in the C, C++, Turbo Pascal, QuickBASIC and Visual Basic
languages.
For more information on calling the RegKeyValidate() or
RegKeyFileValidate() functions, see the section of part four of
this manual that deals with the programming language you are using.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 36
METHODS FOR ADDING EXPIRY INFORMATION
-----------------------------------------------------------------------------
Often, you will want to provide users of your software with a
single registration key that will work with all versions of your
application. This is exactly what you achieve by simply generating
registration keys with the user's name as the registration string,
and using the same generation/ validation code set for all versions
of your application. However, in some cases you may only want
registration keys to function with particular versions of your
application. Alternatively, you may wish to limit the length of
time for which the registration key will continue to function. In
each of these cases, you are adding some form of expiry information
to your registration keys.
There are two basic methods for adding expiry information to RegKey
registration keys:
1. Using different generation/validation code set s for different
versions of your application.
2. Including expiry information in the registration string.
The first method, where you are using different code sets for
different versions of your application, is only applicable when you
wish to generate registration keys that only work with certain
versions of your application. If you wish to include any other form
of expiry information in your registration keys, you must use the
second method, where this information is imbedded in the
registration string. Below, both of these methods are described in
detail:
1. If you wish different registration keys to be required for
different versions of your applications, the easiest approach
is to use different generation/validation code sets for
versions that you wish to require different registration keys.
For instance, if you wish to require the user to pay to upgrade
from one major version of your application to the next, you
could use one code set for the 1.x version(s), a second code
set for the 2.x version(s), and so on. If you are using KeyGen
to generate registration keys, you would then end up with both
"MyApp 1.x" and "MyApp 2.x" in the list of available
applications. When either a new user purchases version 2.x of
your application, or a current user pays to upgrade to version
2.x, you would generate a new registration key using the code
set for version 2.x.
If you only wish to add simple by-version expiry information to
your registration keys, this is probably the preferable method,
as it does not require the expiry information to be included in
the registration string. This is particularly relevant when
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 37
using user-entered registration keys, as the user does not have
to enter the expiry method in addition to their name and
registration key.
2. The second, more flexible option for adding expiry information
to your registration keys is to imbed this information in the
registration string. In this case, the registration string does
not only contain the user's name, but also includes information
such as the version or version(s) registered or the expiry date
of the registration key. Since the registration key generated
for the registration string proves its validity, the user
cannot change the information included in the registration
string without invalidating the registration key. When you use
this approach, it is important that you choose a strict format
for the registration key. For instance, if you wish to include
the user's name and the date of expiry in the registration
string, you might decide to format the string with four digits
for the year, followed by a dash (`-') followed by two digits
for the month, and so on. You might also decide that a comma
and a space will separate the date and user's name. In this
case, the registration string might appear as follows:
1997-11-28, Brian Pirie
While the method of using different code set s can be used
equally well with file-based and user-entered registration
keys, imbedding expiry information in the registration string
is better suited to file-based registration keys. While this
method can also be used with user-entered registration keys, it
does require the user to manually enter any expiry information.
If you do choose to use user-entered registration keys with
this method, you may wish to provide some mechanism to ensure
that the registration string is correctly entered into your
application. One approach would be to break the registration
string into a number of fields, requiring the user to enter the
value for each field. You would then construct the registration
string at application run-time, and use RegKey to check the
validity of the registration key against this string. As an
example, your program might have a registration dialog box with
the following fields:
Your Full Name : Brian Pirie
Year of Registration Expiry : 1997
Month of Registration Expiry : November
Day of Registration Expiry : 28
Registration Key : KT4BP0TRX6AQ2MJK8KFU
From this information, you could generate an appropriately
formatted registration string, such as:
1997-11-28, Brian Pirie
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 38
If, on the other hand, you use file-based registration keys,
this difficulty is avoided, as the registration string with any
expiry information is stored in the registration key file.
Imbedding expiry information in the registration string enables
many variations on the use of RegKey. Possibilities include:
- Selling registration keys that work with the current
and next version of your software.
- Giving the user the option of either purchasing a
"life-time" registration for all versions of your
application, or purchasing a cheaper registration for
only the current version.
- Implementing a pay-by-use system where the user
receives a new registration key when they pay for more
time. In such a system, a registration key could
expire after a certain date or after a certain number
of uses.
- Providing multiple levels of functionality depending
upon the level of the user's registration.
- Creating special "beta-user" registration keys that
work for both beta-test and final release versions,
while "normal" registration keys work only for final
release versions.
- Implementing an on-line "trial" registration system
that allows the user to obtain trail-period
registration keys without purchasing a full
registration.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 39
SECURITY ISSUES
-----------------------------------------------------------------------------
When using RegKey in any program, it is your responsibility to
decide whether employing RegKey alone provides enough security for
your needs. While using RegKey alone does provide enough security
for the vast majority of applications, there may be times when you
wish to augment or combine RegKey with other software protection
mechanisms. This section provides a brief discussion of some of the
issues you may wish to consider when using RegKey, and attempts to
answer the question "how secure is RegKey?"
When evaluating any software protection scheme, such as
registration key mechanisms, it is important to keep in mind that
no such mechanism is 100% secure. If your program can be executed,
it can be reverse-engineered and altered. Fortunately, the fact
that it is possible to beat a software protection scheme does not
necessarily render that scheme as ineffective. In general, it is
sufficient for a software protection mechanism to be difficult
enough to beat that most users will be more likely to pay for your
software than attempt to "beat the system". Yet as was said before,
it is up to you to decide how much security you require for your
software.
In general, there are three basic ways in which someone might try
to bypass the software protection of a program that uses RegKey.
1. By always using the program in unregistered mode
2. By producing a "counterfeit" registration key for your program
3. By "hacking" or somehow modifying your software in order that
it operates in registered mode without a valid registration key
being present.
Each of these possibilities are discussed below:
1. By far the most common way that users bypass registration key
systems is by always using the program in unregistered mode
without paying for it. The likelihood of users doing this with
your software depends largely upon the type of application and
the incentives you offer for registering. In some cases, the
majority of people using a software package that uses
registration keys will be using it without registering. In
other cases, almost everyone using the software will have paid
to register it.
There are a number of things that you can do to encourage users
to pay for your software rather than using it in unregistered
mode:
- If the output of your software will be seen by many people
in addition to the user who is responsible for registering
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 40
it (such as communications software, on-line bulletin board
software, programming library or other program that produces
unalterable output), then displaying or outputting an
"unregistered" message can be sufficient to encourage users
to pay for your software. In this case, the unregistered
message has the potential to advertise to many people that
it is an evaluation copy and must be paid for.
- A common and effective incentive to encourage users to
register software is the enabling of additional capabilities
when operating in registered mode. These additional
capabilities could be the additional helpful features for an
application, additional "levels" of a video game, or the
removal of demonstration-version limitations such as a
maximum data file size. If you are taking this approach, be
careful not to cripple your software's capabilities in
unregistered mode too severely. If the user becomes
frustrated with your software, it is unlikely that they
will want to pay for it. Likewise, you will want to be sure
that the user has an opportunity to examine all of your
software's important capabilities.
- Another common incentive is to offer additional services to
registered users, such as printed documentation, product
support, free upgrade to new versions, source code, etc.
- Another possible approach is to have your software only work
for a certain period of time without registering. To make it
more difficult for users to bypass this scheme by
reinstalling the software, you might want to store
information about the date and time of the first
installation in your program's data file (if applicable).
- An alternative to causing the software itself to expire is
to require the user to obtain a temporary "evaluation" key
from you to even operate in unregistered mode. This key
could expire after any length of time you choose. For more
information on adding expiry information to registration
keys, see the section that begins on page 37.
2. A second way a user might try to bypass a RegKey protected
application is by producing a "counterfeit" registration key
for your software. However, RegKey is designed to make it
extremely difficult to do this. There are two conceivable ways
someone might try to generate a counterfeit RegKey registration
key:
A by an exhaustive search of all possible registration keys
B by determining your application's generation code and using
RegKey's KeyGen program to produce a registration key.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 41
An exhaustive search would not be feasible, even with the
world's fastest supercomputer. There are nearly 2^96 possible
RegKey registration keys, of which nearly 2^48 are valid for a
given registration string. This means that on average, 2^47 (1
followed by 14 zeros) registration keys must be tried before a
valid registration key is found. To put this into context, a
fully optimized version of the RegKeyValidate () function would
require over more than 1 millisecond to determine the validity
of a RegKey registration key on a 66-Mhz Pentium based machine.
Even being able to test 1000 registration keys per second, such
a machine would require over 4,400 years to guess a RegKey
registration key on average.
Determining the generation code for your application by
guessing would be just as difficult as guessing a correct
registration key. Also, although a RegKey validation code can
be quickly calculated from the generation code, the reverse is
not the case. There is no known mathematical method that would
allow you to quickly determine the generation code given the
validation code. As a result, even if the user was able to
obtain the validation code from your application's executable
file(s), they would be no closer to knowing the generation
code.
3. A third way someone might try to defeat a program using RegKey
is by someone modifying the program to cause it to always
operate in registered mode. The vast majority of users would
not have the ability to do this. However, there is always the
fear that someone with the ability to do so may "hack" your
program and even distribute an altered version to other users.
While it is very seldom that this scenario causes major
problems in reality, you may still wish to take steps to
further protect your program from "hacking".
In any program using RegKey, the weakest link is generally at
the point where the program passes control to the RegKey
routines. As a result you may want to somehow encrypt (see
glossary) or check the validity of this code at run time. A
full discussion of such techniques is beyond the scope of this
manual. If you wish to add further robustness to the RegKey
code itself, you may wish to obtain the source code package
(see page 13) to make such modifications.
If you are using RegKey with Visual Basic or Turbo Pascal for
Windows, you should consider checking the validity of the
RegKey DLL at run time. For instance, your program could locate
the RK31VB.DLL or RK31TP.DLL file (depending upon which
language you are using) and calculate a checksum, CRC-32 or
other hash value for the file. That value could then be
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 42
compared with an expected value to determine whether the DLL
has been altered.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 43
TROUBLESHOOTING GUIDE
-----------------------------------------------------------------------------
This section provides a guide to solving common problems when using
the RegKey system. If the suggestions in this section do not help
in solving your problem, please feel more than free to get in touch
with me. For information on how to reach me, see page 71.
PROBLEM
KeyGenW complains that CTL3DV2.DLL is not installed
POSSIBLE SOLUTION
The CTL3DV2.DLL file, included in your RegKey package, must be
placed in the Windows system directory (typically
C:\WINDOWS\SYSTEM). Ensure that this file DOES NOT also reside in
the current default directory, or the directory where KEYGENW.EXE
is located.
PROBLEM
KeyGenW does not list applications that have been previously added
POSSIBLE SOLUTION
Ensure that the current default directory is the same as it was
when KeyGenW was originally run, in order that the same KEYGEN.DAT
file can be located.
PROBLEM
Program using RegKey does not recognize a valid registration key
POSSIBLE SOLUTIONS
Check that the program is using the validation code that
corresponds to the generation code used to create the registration
key. Also check that the peRegistered parameter passed to the
RegKeyValidate() or RegKeyFileValidate() function is being
correctly tested in your program. If file-based registration keys
are being used, ensure that the registration key file is placed in
the current default directory (depending upon your circumstances,
this may be the directory from which you started Windows, the
directory from which you started the application or your
programming language, or the directory where the application's .EXE
file is located. If you are unsure as to what the current default
directory is, explicitly pass the location of the registration key
file to RegKeyFileValidate(). (i.e., "C:\MYAPP\*.KEY"). Also ensure
that only one file with a .KEY extension exists in this directory.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 44
PROBLEM
C or C++ program using RegKey will not compile
POSSIBLE SOLUTIONS
If you receive unexplained errors during the compile phase, ensure
that the REGKEY.H file is "#include"ed in your program's source
file, and ensure that the correct format for calling the RegKey
functions is being used. If you receive unexplained errors during
the linking phase, ensure that you are linking with the appropriate
RegKey library file for the target environment (DOS or Windows) and
memory model that you are using. If you are experiencing problems
linking in small, compact or medium memory models, and suspect that
the code or data segments may be exceeding 64K in size, try using
the large memory model.
PROBLEM
QuickBASIC program using RegKey will not execute
POSSIBLE SOLUTIONS
Ensure that the RegKey Quick Library, REGKEYQB.QLB is located in
the current directory and that QuickBASIC has loaded this file
(specify /LREGKEYQB.QLB on the QB command line). Also ensure that
the REGKEY.BI file is included using the $INCLUDE metacommand.
Check that you are using the correct syntax for calling the RegKey
functions.
PROBLEM
QuickBASIC program using RegKey will not compile to .EXE file
POSSIBLE SOLUTIONS
Ensure that the RegKey stand-alone library, REGKEYQB.LIB is located
in the correct directory and that QuickBASIC is configured to link
your program with this library (specify /LREGKEYQB.QLB on the QB
command line).
PROBLEM
Turbo Pascal program using RegKey will not compile or execute
POSSIBLE SOLUTIONS
Ensure that you have built the .TPU unit for the version of Turbo
Pascal you are using, and named this file RegKeyD.TPU for DOS or
RegKeyW.TPU for Windows. Also ensure that your program refers to
the RegKeyD / RegKeyW unit in the uses statement. Check that you
are using the correct format for calling a RegKey function. If you
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 45
are using RegKey in a Windows program, also ensure that the
RK31TP.DLL file is installed in the Windows system directory.
PROBLEM
Visual Basic program using RegKey will not run
POSSIBLE SOLUTIONS
Ensure that the RK31VB.DLL file is installed in the Windows system
directory. Also ensure that the REGKEYVB.BAS module is included in
the Visual Basic project window for your program. Also check that
you are using the correct format for calling the RegKey functions.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 46
-----------------------------------------------------------------------------
PART 4: LANGUAGE-SPECIFIC INFORMATION
-----------------------------------------------------------------------------
This portion of the RegKey manual describes how to use the RegKey
system with various programming languages, and is divided into the
following sections:
Using RegKey with C or C++..................................47
Using RegKey with QuickBASIC................................56
Using RegKey with Visual Basic..............................62
Using RegKey with Turbo Pascal..............................63
Using RegKey with Other Languages or Operating Systems......70
Since these sections build on the language-neutral information
presented in Part 3 of this manual, you should read Part 3 and have
an understanding of the principles of the RegKey system before
proceeding to these sections. (Part 3 begins on page 18.)
USING THE REGKEY SYSTEM WITH C OR C++
-----------------------------------------------------------------------------
This section describes how to use the RegKey system in programs
written with C or C++. Specific information is provided for using
RegKey with C and C++ compilers from Microsoft, Borland, and Mix
Software including Borland Turbo C, Borland Turbo C++, Borland C++,
Microsoft C, Microsoft Quick C, Microsoft C/C++, Microsoft Visual
C++ and Mix Software's Power C. General information is also
provided for using RegKey with other C or C++ compilers. The
information provided here is pertinent to DOS, Windows and other
operating systems.
In order to use the C/C++ version of RegKey, you must have the
RegKey package RKEY31C.ZIP. If you have the version of RegKey
designed for a different programming language, you may obtain the
C/C++ version of RegKey directly from me. For information on how to
get in touch with me, please see page 71. For a list of the files
included in the version of RegKey for each programming language,
please see the section which begins on page 73.
If you are using a language or compiler that is not specifically
discussed in this manual, the information in this section may also
be of use to you. The manuals included with many programming
languages provide information on how to call C language functions.
In these cases, you will need to know the specifics of the C
language function prototypes which are described in this section.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 47
In order to call the RegKey functions from a C or C++ program, you
must:
1. Include the RegKey header file at the beginning of your
program's source code file(s), using the #include statement:
#include "regkey.h"
Ensuring that the REGKEY.H file is located in the same
directory as your program's source code. Alternatively, you
could place the REGKEY.H file in the same directory as your
compiler's standard header files. In this case, most C
compilers will require you to use angled brackets instead of
double quotes in the #include statement, as follows:
#include <regkey.h>
2. Link with the appropriate RegKey library file for the platform
(DOS or Windows) and memory model you are using. The included
library files are as follows:
REGKEYSD.LIB DOS, tiny and small memory models
REGKEYCD.LIB DOS, compact memory model
REGKEYMD.LIB DOS, medium memory model
REGKEYLD.LIB DOS, large and huge memory models
REGKEYSD.LIB Windows, small memory model
REGKEYCD.LIB Windows, compact memory model
REGKEYMD.LIB Windows, medium memory model
REGKEYLD.LIB Windows, large and huge memory models
REGKEYSP.MIX Power C, small memory model
REGKEYMP.MIX Power C, medium memory model
REGKEYLP.MIX Power C, large memory model
The actual method for configuring your C or C++ compiler to
link with an additional library varies depending upon which
compiler you are using. You should consult your compiler's
manual for detailed information on how to do this.
If you are using the Borland Turbo C IDE, you should create a
text file with a .PRJ extension, and list the name of your
program's .C source file(s) along with the name of the RegKey
library to use in the .PRJ file.
If you are using the Borland Turbo C++ or Borland C++ IDE, you
should create a project file using the Project|Open menu
option, again adding the name of your program's source file(s)
along with the name of the RegKey library to use.
If you are using the Microsoft Quick C IDE, you should use the
Make|Set Program List and Make|Edit Program List menu options
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 48
to include both your program's .C source file(s) and the
appropriate library files.
If you are using Microsoft the Visual C++ IDE, you should
choose Project|Edit to add the name of the RegKey library to
your project.
If you are using any of these C or C++ compilers from the
command line, you must specify the appropriate link parameters
to cause your program to be linked with a RegKey library.
If you are using Mix Software's Power C compiler, you can
create a .PRJ project file that lists the name of your
program's .C source code file(s), along with the RegKey library
that corresponds to the memory model you are using. If you do
not specify a memory model on the command line, the Power C
compiler uses the medium memory model. The /ms command line
switch forces Power C to use the small memory model, and /ml
forces Power C to use the large memory model. To compile with
the .PRJ project file, simply include the name of the project
file on the Power C command line, instead of using the name of
your program's .C source code file(s).
The following example C / C++ programs included in the RegKey
package illustrate how you can call a RegKey function from within
your program:
DEMOAPPD.C DOS C version of DemoApp
DEMOAPPW.C Windows C version of DemoApp
DEMOAPPD.CPP DOS object-oriented C++ version of DemoApp
DEMOAPPW.CPP Windows object-oriented C++ version of DemoApp
When calling either of the registration key validation functions,
RegKeyValidate() or RegKeyFileValidate(), the result is returned in
an enum of type RKVALID. To declare a variable to hold the result
of registration key validation, you would use something similar to
the follows:
RKVALID registeredMode;
The address of this variable is passed to the registration key
validation function using the C or C++ address-of operator (&), as
follows:
RegKeyValidate(szRegString, szRegKey, "KIXE4UB52K", "", 0,
®isteredMode);
This variable can have one of two values, RK_UNREGISTERED or
RK_REGISTERED. Therefore, at any point in your program where you
wish to test whether the program is operating in registered or
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 49
unregistered mode, you might include an if statement similar to the
following:
if(registeredMode == RK_REGISTERED)
{
printf("Registered mode\n");
}
else
{
printf("Unregistered mode\n");
}
Below, the calling format for each of the RegKey API functions is
documented from the perspective of the C and C++ programming
languages:
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 50
-----------------------------------------------------------------------------
LANGUAGE C and C++
FUNCTION RegKeyNewCodeSet()
PURPOSE Creates a new generation / validation code set
FORMAT RKRETURN RegKeyNewCodeSet(
const char FAR *szGenerationCode,
char FAR *szValidationCode);
RETURNS Type RKRETURN. RK_SUCCESS on success, RK_FAILURE on failure.
PARAMS szGenerationCode - INPUT: 10-digit generation code string
szValidationCode - OUTPUT: 10-digit validation code string
NOTES Generates a registration key validation code corresponding to a
generation code. This set of generation and validation codes is
unique for each application using RegKey, and determines the unique
registration key that corresponds to a particular user's name. The
secret generation code is used at registration key generation time,
and the corresponding validation code is used within your
application when validating a registration key. The validation and
generation codes are each represented as a ten-digit strings of
numbers and upper-case letters. Hence both parameters should be
declared as arrays of characters of at least 11 elements in size.
This function is called by KeyGen or your own utility, and is only
used once for each application using RegKey.
The concepts of code set creation are introduced in the section
which begins on page 29.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 51
-----------------------------------------------------------------------------
LANGUAGE C and C++
FUNCTION RegKeyGenerate()
PURPOSE Creates a user-entered type registration key
FORMAT RKRETURN RegKeyGenerate(
const char FAR *szRegString,
const char FAR *szGenerationCode,
const char FAR *szRandomSeed,
char FAR *szRegKey);
RETURNS Type RKRETURN. RK_SUCCESS on success, RK_FAILURE on failure.
PARAMS szRegString - INPUT: Registration string
szGenerationCode - INPUT: Application's generation code string
szRandomSeed - INPUT: Random number seed string
szRegKey - OUTPUT: 20-digit registration key string
NOTES Generates a registration key for a particular user, using the
secret generation code corresponding to a particular application
(as passed to RegKeyNewCodeSet()). The registration string is
usually the name of the registered user, but may also contain other
information, such as the version registered or date of expiry. The
registration string may be zero to 64K characters in length, and is
null-terminated. The registration key is returned as a string of
letters and upper-case letters. The string pointed to by szRegKey
must be large enough to hold 20 digits, plus a string terminator
character. szRandomSeed should contain 10 random numbers and upper-
case numbers, which are required during the registration key
generation process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for user-entered registration keys;
compare with RegKeyFileGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 52
-----------------------------------------------------------------------------
LANGUAGE C and C++
FUNCTION RegKeyValidate()
PURPOSE Checks the validity of a user-entered registration key
FORMAT RKRETURN RegKeyValidate(
const char FAR *szRegString,
const char FAR *szRegKey,
const char FAR *szValidationCode,
const char FAR *szYourName,
unsigned long int nYourKey,
RKVALID FAR *peRegistered);
RETURNS Type RKRETURN. RK_SUCCESS on success, RK_FAILURE on failure.
PARAMS szRegString - INPUT: Registration string
szRegKey - INPUT: 20-digit registration key string
szValidationCode - INPUT: Application's validation code string
szYourName - INPUT: Your name (if registered)
nYourKey - INPUT: Your key (if registered)
peRegistered - OUTPUT: Is key valid
NOTES Checks whether a given registration string and registration key
combination is valid for a particular application, using the
application-specific validation code that was generated by
RegKeyNewCodeSet(). The RKVALID pointed to by peRegistered is set
to either RK_REGISTERED or RK_UNREGISTERED, indicating whether or
not the registration key and registration string are valid. If you
have registered RegKey, your own name and RegKey registration key
should be passed to this function to disable the RegKey
"unregistered" message.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with user-
entered registration keys; compare with RegKeyFileValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 53
-----------------------------------------------------------------------------
LANGUAGE C and C++
FUNCTION RegKeyFileGenerate()
PURPOSE Generates a file-based registration key
FORMAT RKRETURN RegKeyFileGenerate(
const char FAR *szRegString,
const char FAR *szGenerationCode,
const char FAR *szRandomSeed,
const char FAR *szFileName);
RETURNS Type RKRETURN. RK_SUCCESS on success, RK_FAILURE on failure.
PARAMS szRegString - INPUT: Registration string
szGenerationCode - INPUT: Application's generation code string
szRandomSeed - INPUT: Random number seed string
szFileName - INPUT: Registration key file name
NOTES Generates a file-based registration key for a particular user,
using the secret generation code corresponding to a particular
application (as passed to RegKeyNewCodeSet()). The registration
string is usually the name of the registered user, but may also
contain other information, such as the version registered or date
of expiry. The registration string may be zero to 64K characters in
length, and is null-terminated. A registration key file is
generated, using the specified filename, containing the
registration string and the resulting registration key. If a file
with the specified name already exists, it is overwritten.
szRandomSeed should contain 10 random numbers and upper-case
letters, which are required during the registration key generation
process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for file-based registration keys;
compare with RegKeyGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 54
-----------------------------------------------------------------------------
LANGUAGE C and C++
FUNCTION RegKeyFileValidate()
PURPOSE Checks the validity of a file-based registration key
FORMAT RKRETURN RegKeyFileValidate(
const char FAR *szFileName,
const char FAR *szValidationCode,
const char FAR *szYourName,
unsigned long int nYourKey,
char FAR *szRegString,
unsigned short int cbMaxStringSize,
RKVALID FAR *peRegistered);
RETURNS Type RKRETURN. RK_SUCCESS on success, RK_FAILURE on failure.
PARAMS szFileName - INPUT: Registration key file name
szValidationCode - INPUT: App's validation code
szYourName - INPUT: Your name (if registered)
nYourKey - INPUT: Your key (if registered)
szRegString - OUTPUT: Registration string
cbMaxStringSize - INPUT: Size of reg. string
peRegistered - OUTPUT: Is key valid
NOTES Checks whether the specified registration key file is valid for a
particular application, using the application-specified validation
code that was generated by RegKeyNewCodeSet(). The RKVALID pointed
to by peRegistered is set to either RK_REGISTERED or
RK_UNREGISTERED, indicating whether or not the registration key and
registration string stored in the registration key file are valid.
The szFileName parameter may include wildcards. If you have
registered RegKey, your own name and RegKey registration key should
be passed to this function to disable the RegKey "unregistered"
message.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with file-
based registration keys; compare with RegKeyValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 55
USING THE REGKEY SYSTEM WITH QUICKBASIC
-----------------------------------------------------------------------------
This section describes how to use RegKey with programs written with
the Microsoft QuickBASIC programming language. RegKey has been
tested with Microsoft QuickBASIC version 4.5. Although no testing
has been done with other versions, this information would likely
also apply to earlier versions of QuickBASIC. In addition, this
information may be applicable to using RegKey with Microsoft Visual
Basic for DOS. However, RegKey has not been tested with Visual
Basic for DOS. For information on using RegKey with Visual Basic
for Windows, see page 62.
In order to use the QuickBASIC version of RegKey, you must have the
RegKey package RKEY31QB.ZIP. If you have the version of RegKey
designed for a different programming language, you may obtain the
QuickBASIC version of RegKey directly from me. For information on
how to get in touch with me, please see page 71. For a list of the
files included in the version of RegKey for each programming
language, please see the section which begins on page 73.
There are three files that form the RegKey interface for
QuickBASIC. The REGKEYQB.QLB Quick Library contains a version of
the RegKey routines for use within the QuickBASIC development
environment (QB.EXE). In order to use RegKey from within
QuickBASIC, you must start up QuickBASIC using the command:
QB \LREGKEYQB.QLB
REGKEYQB.LIB is a stand-alone library corresponding to
REGKEYQB.QLB, and is automatically used by QuickBASIC when
producing an executable (.EXE) file of your program. The
REGKEYQB.BI file provides QuickBASIC with information concerning
the routines contained in the REGKEYQB.??? library files, and must
be included in any QuickBASIC program that uses RegKey. To do this,
the $INCLUDE metacommand is used as follows:
' $INCLUDE: 'regkeyqb.bi'
For an example of a QuickBASIC program that uses RegKey, see the
DEMOAPPD.BAS program.
Below, the calling format for each of the RegKey API functions is
documented from the perspective of the BASIC programming language:
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 56
-----------------------------------------------------------------------------
LANGUAGE QuickBASIC and Visual Basic
FUNCTION RegKeyNewCodeSet()
PURPOSE Creates a new generation / validation code set
FORMAT Result% = RegKeyNewCodeSet%(sGenerationCode$, sValidationCode$)
RETURNS In QuickBASIC: RKSuccess on success, RKFailure on failure.
In Visual Basic: 1 on success, 0 on failure.
PARAMS sGenerationCode$ - INPUT: 10-digit generation code string
sValidationCode$ - OUTPUT: 10-digit validation code string
NOTES Generates a registration key validation code corresponding to a
generation code. This set of generation and validation codes is
unique for each application using RegKey, and determines the unique
registration key that corresponds to a particular user's name. The
secret generation code is used at registration key generation time,
and the corresponding validation code is used within your
application when validating a registration key. The validation and
generation codes are each represented as a ten-digit strings of
numbers and upper-case letters. This function is called by KeyGen
or your own utility, and is only used once for each application
using RegKey.
The concepts of code set creation are introduced in the section
which begins on page 29.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 57
-----------------------------------------------------------------------------
LANGUAGE QuickBASIC and Visual Basic
FUNCTION RegKeyGenerate()
PURPOSE Creates a user-entered type registration key
FORMAT Result% = RegKeyGenerate%(sRegString$, sGenerationCode$,
sRandomSeed$, sRegKey$)
RETURNS In QuickBASIC: RKSuccess on success, RKFailure on failure.
In Visual Basic: 1 on success, 0 on failure.
PARAMS sRegString$ - INPUT: Registration string
sGenerationCode$ - INPUT: Application's generation code string
sRandomSeed$ - INPUT: Random number seed string
sRegKey$ - OUTPUT: 20-digit registration key string
NOTES Generates a registration key for a particular user, using the
secret generation code corresponding to a particular application
(as passed to RegKeyNewCodeSet()). The registration string is
usually the name of the registered user, but may also contain other
information, such as the version registered or date of expiry. The
registration string may be zero to 64K characters in length. The
registration key is returned as a string of letters and upper-case
letters. sRandomSeed$ should contain 10 random numbers and upper-
case numbers, which are required during the registration key
generation process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for user-entered registration keys;
compare with RegKeyFileGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 58
-----------------------------------------------------------------------------
LANGUAGE QuickBASIC and Visual Basic
FUNCTION RegKeyValidate()
PURPOSE Checks the validity of a user-entered registration key
FORMAT Result% = RegKeyValidate%(sRegString$, sRegKey$, sValidationCode$,
sYourName$, nYourKey AS LONG, peRegistered AS INTEGER)
RETURNS In QuickBASIC: RKSuccess on success, RKFailure on failure.
In Visual Basic: 1 on success, 0 on failure.
PARAMS sRegString$ - INPUT: Registration string
sRegKey$ - INPUT: 20-digit registration key
sValidationCode$ - INPUT: Application's validation code
sYourName$ - INPUT: Your name (if registered)
nYourKey& - INPUT: Your key (if registered)
peRegistered% - OUTPUT: Is key valid
NOTES Checks whether a given registration string and registration key
combination is valid for a particular application, using the
application-specific validation code that was generated by
RegKeyNewCodeSet(). The integer passed as peRegistered is set to 0
(or RKUnregistered in QuickBASIC) if the registration key is not
valid, and is set to 1 (or RKRegistered in QuickBASIC) if the
registration key is valid. If you have registered RegKey, your own
name and RegKey registration key should be passed to this function
to disable the RegKey "unregistered" message.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with user-
entered registration keys; compare with RegKeyFileValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 59
-----------------------------------------------------------------------------
LANGUAGE QuickBASIC and Visual Basic
FUNCTION RegKeyFileGenerate()
PURPOSE Generates a file-based registration key
FORMAT Result% = RegKeyFileGenerate%(sRegString$, sGenerationCode$,
sRandomSeed$, sFileName$)
RETURNS In QuickBASIC: RKSuccess on success, RKFailure on failure.
In Visual Basic: 1 on success, 0 on failure.
PARAMS sRegString$ - INPUT: Registration string
sGenerationCode$ - INPUT: Application's generation code string
sRandomSeed$ - INPUT: Random number seed string
sFileName$ - INPUT: Registration key file name string
NOTES Generates a file-based registration key for a particular user,
using the secret generation code corresponding to a particular
application (as passed to RegKeyNewCodeSet()). The registration
string is usually the name of the registered user, but may also
contain other information, such as the version registered or date
of expiry. A registration key file is generated, using the
specified filename, containing the registration string and the
resulting registration key. If a file with the specified name
already exists, it is overwritten. sRandomSeed$ should contain 10
random numbers and upper-case letters, which are required during
the registration key generation process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for file-based registration keys;
compare with RegKeyGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 60
-----------------------------------------------------------------------------
LANGUAGE QuickBASIC and Visual Basic
FUNCTION RegKeyFileValidate()
PURPOSE Checks the validity of a file-based registration key
FORMAT Result% = RegKeyFileValidate%(sFileName$, sValidationCode$,
sYourName$, nYourKey AS LONG, sRegString$, cbMaxStringSize AS
INTEGER, peRegistered AS INTEGER)
RETURNS In QuickBASIC: RKSuccess on success, RKFailure on failure.
In Visual Basic: 1 on success, 0 on failure.
PARAMS sFileName$ - INPUT: Registration key file name string
sValidationCode$ - INPUT: App's validation code string
sYourName$ - INPUT: Your name (if registered)
nYourKey - INPUT: Your key (if registered)
sRegString$ - OUTPUT: Registration string
cbMaxStringSize% - INPUT: Maximum size of registration string
peRegistered& - OUTPUT: Is key valid
NOTES Checks whether the specified registration key file is valid for a
particular application, using the application-specified validation
code that was generated by RegKeyNewCodeSet(). The integer passed
as peRegistered is set to 0 (or RKUnregistered in QuickBASIC) if
the registration key is not valid, and is set to 1 (or RKRegistered
in QuickBASIC) if the registration key is valid. The szFileName
parameter may include wildcards. If you have registered RegKey,
your own name and RegKey registration key should be passed to this
function to disable the RegKey "unregistered" message.
The integer cbMaxString size indicates the maximum number if
characters that should be placed in the sRegString$ string. With
QuickBASIC, this may be any value from 1 to 255. With Visual Basic,
this may be any value from 1 to 30,000.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with file-
based registration keys; compare with RegKeyValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 61
USING THE REGKEY SYSTEM WITH VISUAL BASIC
-----------------------------------------------------------------------------
This section describes how to use RegKey in programs written with
Microsoft Visual Basic for Windows. For information on using RegKey
with Visual Basic for DOS, see page 56. RegKey has been tested with
version 2.0 of Visual Basic for Windows. This information should
also apply to version 1.0 and 3.0 of the Visual Basic system.
In order to use the Visual Basic version of RegKey, you must have
the RegKey package RKEY31VB.ZIP. If you have the version of RegKey
designed for a different programming language, you may obtain the
Visual Basic version of RegKey directly from me. For information on
how to get in touch with me, please see page 71. For a list of the
files included in the version of RegKey for each programming
language, please see the section which begins on page 73.
The RegKey interface for Visual Basic consists of two components:
the REGKEYVB.BAS module that you include in your Visual Basic
project, and the RK31VB.DLL file that is used to generate or
validate registration keys during your program's execution. To
include REGKEYVB.BAS in your program, choose the File|Add File...
option from within Visual Basic, and then select the REGKEYVB.BAS
file. The REGKEYVB.BAS module will now appear in your program's
project window within Visual Basic. You should not normally change
the contents of this file, but feel free to refer to it for
reference to the RegKey functions. The role of the REGKEYVB.BAS
module is to serve as a intermediate layer between your program and
the RK31VB.DLL library, ensuring that strings passed to RK31VB.DLL
are large enough for it to return any necessary information to you.
The RK31VB.DLL file must be present in the Windows system directory
(typically C:\WINDOWS\SYSTEM) whenever your program is run, and
should be distributed with your program. You may wish to provide an
installation utility for your software, which will automatically
install the RK31VB.DLL file in the user's Windows system directory.
For an example of a Visual Basic program that uses RegKey, see the
DemoAppW source code contained in the files DEMOAPPW.BAS and
DEMOAPPW.MAK.
The calling format for each of the RegKey API functions is
documented from the perspective of the BASIC programming language
beginning on page 57.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 62
USING THE REGKEY SYSTEM WITH TURBO PASCAL
-----------------------------------------------------------------------------
This section describes how to use RegKey in programs written with
Turbo Pascal. In order to use the Turbo Pascal version of RegKey,
you must have the RegKey package RKEY31TP.ZIP. If you have the
version of RegKey designed for a different programming language,
you may obtain the Turbo Pascal version of RegKey directly from me.
For information on how to get in touch with me, please see page 71.
For a list of the files included in the version of RegKey for each
programming language, please see the section which begins on page
73.
The RegKey package includes.TPU units that are compatible with
Turbo Pascal for DOS 7.0 and Turbo Pascal for Windows 1.0. If you
are using a different version of Turbo Pascal, you will have to
follow the instructions below to build a RegKey unit for your
version of Turbo Pascal. If you are using Turbo Pascal for DOS 7.0,
simply rename the included REGKEYD7.TPU file to REGKEYD.TPU. If you
are using Turbo Pascal for Windows 1.0, rename the included
REGKEYW1.TPU file to REGKEYW.TPU. You can then skip the following
instructions for building a RegKey unit.
If you are using any version of Turbo Pascal other than Turbo
Pascal for DOS 7.0 or Turbo Pascal for Windows 1.0, you will have
to first build a .TPU unit for your version of Turbo Pascal. In
order to do this, you will need to have the following file
(included in the RegKey package) located in the current directory
or your Turbo Pascal working directory:
FOR DOS: REGKEYD.PAS
RKFGEND.OBJ
RKFILED.OBJ
RKFVALD.OBJ
RKGEND.OBJ
RKMATHD.OBJ
RKNSETD.OBJ
RKRD.OBJ
RKTPD.OBJ
RKVALD.OBJ
For Windows: REGKEYW.PAS
The Turbo Pascal/DOS RegKey unit is built from the REGKEYD.PAS
file. You can build this unit from the DOS command prompt using the
TPC compiler, or from within the TURBO development environment.
From the command line, type TPC REGKEYD.PAS to build the
REGKEYD.TPU unit. From within the TURBO development environment,
open the REGKEYD.PAS source file for DOS, or the REGKEYW.PAS source
file for Windows. From the Compile menu choose File as a
destination, and then choose the "Make" command.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 63
The Turbo Pascal/Windows RegKey unit is built from the REGKEYW.PAS
file. You can build this unit from within Turbo Pascal for Windows
by opening the REGKEYW.PAS file and choosing the Compile|Make menu
option.
Once you have built a RegKey unit for your version of Turbo Pascal,
you can either place it in the same directory as your program's
.PAS source code files, or you can place it in the Turbo Pascal
UNITS directory.
To call any of the RegKey functions from within a Turbo Pascal
program, you must place a uses clause at the start of your program,
and include RegKeyD (for DOS) or RegKeyW (for Windows) in the list
of units. For example:
program TestAppD;
uses RegKeyD, Graph;
In addition, if you are using Turbo Pascal/Windows, the RK31TP.DLL
file must reside in the Windows/System directory when your program
is run. As a result, you must include the RK31TP.DLL file in the
installation of your program.
For an example of a Turbo Pascal/DOS program that uses RegKey, see
the DEMOAPPD.PAS program that is included in your RegKey package.
For an example of a Turbo Pascal/Windows program that uses RegKey,
see the DEMOAPPW.PAS program.
Below, the calling format for each of the RegKey API functions is
documented from the perspective of the BASIC programming language:
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 64
-----------------------------------------------------------------------------
LANGUAGE Turbo Pascal
FUNCTION RegKeyNewCodeSet()
PURPOSE Creates a new generation / validation code set
FORMAT function RegKeyNewCodeSet(
sGenerationCode : string;
sValidationCode : string)
: RKReturn;
RETURNS Enumeration type RKReturn. Value of RKSuccess on success, RKFailure
on failure.
PARAMS sGenerationCode - INPUT: 10-digit generation code string
sValidationCode - OUTPUT: 10-digit validation code string
NOTES Generates a registration key validation code corresponding to a
generation code. This set of generation and validation codes is
unique for each application using RegKey, and determines the unique
registration key that corresponds to a particular user's name. The
secret generation code is used at registration key generation time,
and the corresponding validation code is used within your
application when validating a registration key. The validation and
generation codes are each represented as a ten-digit strings of
numbers and upper-case letters. This function is called by KeyGen
or your own utility, and is only used once for each application
using RegKey.
The concepts of code set creation are introduced in the section
which begins on page 29.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 65
-----------------------------------------------------------------------------
LANGUAGE Turbo Pascal
FUNCTION RegKeyGenerate()
PURPOSE Creates a user-entered type registration key
FORMAT function RegKeyGenerate(
sRegString : string;
sGenerationCode : string;
sRandomSeed : string;
sRegKey : string)
: RKReturn;
RETURNS Enumeration type RKReturn. Value of RKSuccess on success, RKFailure
on failure.
PARAMS sRegString - INPUT: Registration string
sGenerationCode - INPUT: Application's generation code string
sRandomSeed - INPUT: Random number seed string
sRegKey - OUTPUT: 20-digit registration key string
NOTES Generates a registration key for a particular user, using the
secret generation code corresponding to a particular application
(as passed to RegKeyNewCodeSet()). The registration string is
usually the name of the registered user, but may also contain other
information, such as the version registered or date of expiry. The
registration key is returned in sRegKey as a string of letters and
upper-case letters. The string passed in sRegKey should be at least
20 characters in size. sRandomSeed should contain 10 random numbers
and upper-case numbers, which are required during the registration
key generation process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for user-entered registration keys;
compare with RegKeyFileGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 66
-----------------------------------------------------------------------------
LANGUAGE Turbo Pascal
FUNCTION RegKeyValidate()
PURPOSE Checks the validity of a user-entered registration key
FORMAT function RegKeyValidate(
sRegString : string;
sRegKey : string;
sValidationCode : string;
sYourName : string;
nYourKey : longint;
var peRegistered : RKValid)
: RKReturn;
RETURNS Enumeration type RKReturn. Value of RKSuccess on success, RKFailure
on failure.
PARAMS sRegString - INPUT: Registration string
sRegKey - INPUT: 20-digit registration key
sValidationCode - INPUT: Application's validation code
sYourName - INPUT: Your name (if registered)
nYourKey - INPUT: Your key (if registered)
peRegistered - OUTPUT: Is key valid
NOTES Checks whether a given registration string and registration key
combination is valid for a particular application, using the
application-specific validation code that was generated by
RegKeyNewCodeSet(). The parameter peRegistered should be a variable
of type RKValid. This variable is set to the value RKRegistered if
the registration key is valid, and RKUnregistered if it is not
valid. If you have registered RegKey, your own name and RegKey
registration key should be passed to this function to disable the
RegKey "unregistered" message.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with user-
entered registration keys; compare with RegKeyFileValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 67
-----------------------------------------------------------------------------
LANGUAGE Turbo Pascal
FUNCTION RegKeyFileGenerate()
PURPOSE Generates a file-based registration key
FORMAT function RegKeyFileGenerate(
sRegString : string;
sGenerationCode : string;
sRandomSeed : string;
sFileName : string)
: RKReturn;
RETURNS Enumeration type RKReturn. Value of RKSuccess on success, RKFailure
on failure.
PARAMS sRegString - INPUT: Registration string
sGenerationCode - INPUT: Application's generation code string
sRandomSeed - INPUT: Random number seed string
sFileName - INPUT: Registration key file name string
NOTES Generates a file-based registration key for a particular user,
using the secret generation code corresponding to a particular
application (as passed to RegKeyNewCodeSet()). The registration
string is usually the name of the registered user, but may also
contain other information, such as the version registered or date
of expiry. A registration key file is generated, using the
specified filename, containing the registration string and the
resulting registration key. If a file with the specified name
already exists, it is overwritten. sRandomSeed should contain 10
random numbers and upper-case letters, which are required during
the registration key generation process.
This function is called by KeyGen or your own registration key
generation utility, each time a registration key is generated for a
new user. This function is used for file-based registration keys;
compare with RegKeyGenerate().
Concepts of registration key generation are introduced in the
section which begins on page 31.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 68
-----------------------------------------------------------------------------
LANGUAGE Turbo Pascal
FUNCTION RegKeyFileValidate()
PURPOSE Checks the validity of a file-based registration key
FORMAT function RegKeyFileValidate(
sFileName : string;
sValidationCode : string;
sYourName : string;
nYourKey : longint;
sRegString : string;
cbMaxStringSize : byte;
var peRegistered : RKValid)
: RKReturn;
RETURNS Enumeration type RKReturn. Value of RKSuccess on success, RKFailure
on failure.
PARAMS sFileName - INPUT: Registration key file name string
sValidationCode - INPUT: App's validation code string
sYourName - INPUT: Your name (if registered)
nYourKey - INPUT: Your key (if registered)
sRegString - OUTPUT: Registration string
cbMaxStringSize - INPUT: Maximum size of registration string
peRegistered - OUTPUT: Is key valid
NOTES Checks whether the specified registration key file is valid for a
particular application, using the application-specified validation
code that was generated by RegKeyNewCodeSet(). The parameter
peRegistered should be a variable of type RKValid. This variable is
set to the value RKRegistered if the registration key is valid, and
RKUnregistered if it is not valid. If you have registered RegKey,
your own name and RegKey registration key should be passed to this
function to disable the RegKey "unregistered" message.
The integer cbMaxString size indicates the maximum number if
characters that should be placed in the sRegString string, and
should be equal to the size of the passed string as declared in
Turbo Pascal, or 255 if no size was specified when declaring the
string.
This function is called from within your application each time it
executes, in order to determine whether it should operate in
registered or unregistered mode. This function is used with file-
based registration keys; compare with RegKeyValidate().
Concepts of registration key validation are introduced in the
section which begins on page 34.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 69
USING REGKEY WITH OTHER LANGUAGES OR OPERATING SYSTEMS
-----------------------------------------------------------------------------
If you are working with a programming language, compiler or
operating system that is not specifically addressed in the above
sections, it may still be possible for you to use RegKey. There are
three possible options:
A.) Calling routines from the included RegKey library files
B.) Obtaining the RegKey source code and porting it
C.) Obtaining a custom version of RegKey from me
Each of these options are described in more detail below:
A.) Many PC-based programming languages have the ability to call
functions using the C calling conventions, from Intel/Microsoft
object format library files. For information on how to do this
in the language you are using, see the documentation that is
included with your language. This documentation will probably
refer to the function names and parameters (known as the
function prototype) of the C language functions to be called.
The pertinent information on the C functions that form RegKey
is described in the section beginning on page 47.
B.) As is described on page 13, the RegKey source code is
available. RegKey is written in ANSI-compliant C and is
designed to be easily ported to other hardware platforms or
operating systems. While the source code package does include
80x86 assembly language routines for performing certain tasks
such as 96-bit arithmetic, the equivalent C source code for
these routines is also included.
C.) I may also be willing to port RegKey to another operating
system, hardware platform or programming language for you. To
do this, I usually require that you (LEGALLY) furnish me with
the necessary software and/or hardware to create a custom
version of RegKey. If I am able to keep the software / hardware
and use it to produce future versions of RegKey for others, I
would generally provide you with a free RegKey registration and
copy of the source code, but no more. If you wish to discuss
this possibility further, please feel free to get in touch with
me. For more information how to reach me, see page 71.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 70
-----------------------------------------------------------------------------
PART 5: ADDITIONAL INFORMATION
-----------------------------------------------------------------------------
GETTING HELP
-----------------------------------------------------------------------------
If you have any questions about RegKey, would like help with a
program that your are writing, or have any suggestions for future
versions of RegKey, please feel free to get in touch with me.
If you are having difficulties with RegKey, the more detailed
information you supply (such as source code to the program that is
causing the problem, how to duplicate the problem, etc.), the more
quickly I will be able to determine the cause of your problem.
If you would like to receive the most recent copy of RegKey, you
can download it from the RegKey support bulletin board system
(phone number below), file request it from the FidoNet address
below, or send three dollars ($3) to cover the cost of postage and
a diskette to the address listed below.
You can get in touch with me by any of the following means:
- By conventional mail. My postal address is:
Brian Pirie
Apt. 1416 - 2201 Riverside Dr.
Ottawa, Ontario
K1H 8K9
Canada
- By electronic mail. My Internet e-mail address is:
brian@bpecomm.ocunix.on.ca
And my FidoNet netmail address is:
1:243/8 ***SEE NOTE BELOW***
If you have access to an on-line service such as Prodigy or
CompuServe, you can also reach me by sending Internet e-mail. On
CompuServe, send mail to:
INTERNET:brian@bpecomm.ocunix.on.ca
While I would like to be able to reply to all FidoNet NetMail
messages by CrashMail, I am afraid I can not afford to do this.
So, if you choose to send NetMail, please indicate whether you
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 71
would like me to reply by routed NetMail (this may not work, if
routed NetMail is not available in your area), or to place the
message on hold for you to poll and pick up.
- By calling the RegKey support bulletin board system. The phone
number for the support BBS is:
+1 613 526 4466
The BBS supports speeds up to 9600bps, with v.32/v.42bis
capabilities. You are given full access to the support BBS on
your first call. In addition to being able to reach me through
the support BBS, you can also download the newest version of
RegKey, and other software that may be of interest to people
using RegKey.
I try to respond to all correspondences as soon as possible (i.e.,
within twenty-four hours). However, it is possible that it may take
longer to reply to your message, particularly if you are asking a
question that requires time for me to get an answer, or if I happen
to be away for a few days.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 72
CONTENTS OF PACKAGE
-----------------------------------------------------------------------------
The files included in the disk or archive in which you received
your copy of RegKey will vary depending upon which language version
of RegKey you have received. Different versions of RegKey are
available for each of the following programming languages:
RKEY31C.ZIP C/C++ (DOS & Windows) version of RegKey
RKEY31TP.ZIP Turbo Pascal (DOS & Windows) version of RegKey
RKEY31QB.ZIP QuickBASIC (DOS) version of RegKey
RKEY31VB.ZIP VisualBasic (Windows) version of RegKey
If you do not have the correct RegKey package for the programming
language you are using, you may obtain the newest version of any of
the RegKey packages directly from me. For information on how to do
this, please see page 71.
The following files compose the C/C++ version of RegKey
(RKEY31C.ZIP)
FILE_ID.DIZ A brief description of the RegKey package
REGKEYSD.LIB DOS tiny/small memory model RegKey library
REGKEYCD.LIB DOS compact memory model RegKey library
REGKEYMD.LIB DOS medium memory model RegKey library
REGKEYLD.LIB DOS large/huge memory model RegKey library
REGKEYSW.LIB Windows small memory model RegKey library
REGKEYCW.LIB Windows compact memory model RegKey library
REGKEYMW.LIB Windows medium memory model RegKey library
REGKEYLW.LIB Windows large/huge memory model RegKey library
REGKEYSP.MIX Power C small memroy model RegKey library
REGKEYMP.MIX Power C medium memory model RegKey library
REGKEYLP.MIX Power C large memory model RegKey library
REGKEY.H C/C++ include file for RegKey
DEMOAPPD.C C language DOS version of example program
DEMOAPPW.C C language Windows version of example program
DEMOAPPD.CPP C++ language DOS version of example program
DEMOAPPW.CPP C++ language Windows version of example program
KEYGEN.DAT Data file used by key generation utility
KEYGEND.EXE DOS version of key generation utility
KEYGENW.EXE Windows version of key generation utility
CTL3DV2.DLL Used by Windows version of KeyGen
DEMOAPPD.EXE DOS version of the RegKey example program
DEMOAPPW.EXE Windows version of the RegKey example program
ORDER.FRM Easy to print RegKey order form
REGKEY.TXT The RegKey programmer's manual (this file).
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 73
The following files compose the Turbo Pascal version of RegKey
(RKEY31TP.ZIP)
FILE_ID.DIZ A brief description of the RegKey package
RKFGEND.OBJ Object files for building RegKey TP/DOS unit
RKFILED.OBJ " "
RKFVALD.OBJ " "
RKGEND.OBJ " "
RKMATHD.OBJ " "
RKNSETD.OBJ " "
RKRD.OBJ " "
RKTPD.OBJ " "
RKVALD.OBJ " "
REGKEYD.PAS Pascal file for building RegKey TP/DOS unit
REGKEYD7.TPU RegKey Unit for Turbo Pascal 7.0 for DOS
REGKEYW.PAS Pascal file for building RegKey TP/Windows unit
REGKEYW1.TPU RegKey Unit For Turbo Pascal 1.0 for Widnows
DEMOAPPD.PAS Pascal/DOS version of RegKey example program
DEMOAPPW.PAS Pascal/Windows version of RegKey example prog.
KEYGEN.DAT Data file used by key generation utility
KEYGEND.EXE DOS version of key generation utility
KEYGENW.EXE Windows version of key generation utility
CTL3DV2.DLL Used by Windows version of KeyGen
DEMOAPPD.EXE DOS version of the RegKey example program
DEMOAPPW.EXE Windows version of the RegKey example program
ORDER.FRM Easy to print RegKey order form
REGKEY.TXT The RegKey programmer's manual (this file).
The following files compose the QuickBASIC version of RegKey
(RKEY31QB.ZIP)
FILE_ID.DIZ A brief description of the RegKey package
REGKEYQB.QLB QuickBASIC Quick Library for RegKey
REGKEYQB.LIB QuickBASIC stand-alone library for RegKey
REGKEYQB.BI QuickBASIC include file for RegKey
DEMOAPPD.BAS QuickBASIC version of the example program
KEYGEN.DAT Data file used by key generation utility
KEYGEND.EXE DOS version of key generation utility
KEYGENW.EXE Windows version of key generation utility
CTL3DV2.DLL Used by Windows version of KeyGen
DEMOAPPD.EXE DOS version of the RegKey example program
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 74
ORDER.FRM Easy to print RegKey order form
REGKEY.TXT The RegKey programmer's manual (this file).
The following files compose the Visual Basic version of RegKey
(RKEY31VB.ZIP)
FILE_ID.DIZ A brief description of the RegKey package
RK31VB.DLL RegKey .DLL callable from Visual Basic
REGKEYVB.BAS RegKey interface module for Visual Basic
DEMOAPPW.BAS Visual Basic version of the example program
DEMOAPPW.MAK Visual Basic project file for example program
KEYGEN.DAT Data file used by key generation utility
KEYGEND.EXE DOS version of key generation utility
KEYGENW.EXE Windows version of key generation utility
CTL3DV2.DLL Used by Windows version of KeyGen
DEMOAPPW.EXE Windows version of the RegKey example program
ORDER.FRM Easy to print RegKey order form
REGKEY.TXT The RegKey programmer's manual (this file).
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 75
REVISION HISTORY
-----------------------------------------------------------------------------
RegKey 3.00, RegKey 3.10 and all future versions of RegKey will
recognize an identical registration key format. As a result, when
upgrading from RegKey 3.00 or any later version, you are guaranteed
compatibility with registration keys already created for your
program. Also, older versions of your program will recognize
registration keys produced with newer versions of RegKey.
The following changes and enhancements have been made to RegKey
version 3.10:
- Previously, the files for every programming language supported
by RegKey were distributed in one package (e.g. REGKEY30.ZIP).
In order to make the RegKey package smaller to download or
transfer, RegKey is now distributed in the following packages:
RKEY31C.ZIP C/C++ version of RegKey
RKEY31TP.ZIP Turbo Pascal version of RegKey
RKEY31QB.ZIP QuickBASIC version of RegKey
RKEY31VB.ZIP VisualBasic version of RegKey
In order to simplify the use of RegKey for those who are using
it with more than one programming language, all versions include
the same manual.
- Any trailing carriage return or line feed characters in a
registration key file are ignored. With version 3.00, if the
user attempted to edit the registration key file, some text
editors would add a trailing end-of-line character, destroying
the registration key file. This change has no effect on the
behavior of user-entered registration keys.
- The RegKey C language package now includes support for Mix
Software's Power C compiler.
- The RegKey Pascal language package now includes full support for
Turbo Pascal for Windows. Although it was possible to use RegKey
3.00 with Turbo Pascal for Windows, it was necessary to make
some modifications to the REGKEYW.PAS file.
- When generating user-entered registration keys, the Windows
version of the KeyGen program now allows the registration key to
be copied to the Windows clipboard by pressing a new "copy to
clipboard" button.
- The Windows versions of the C and C++ DemoApp source code was
accidentally omitted from the RegKey 3.00 package. This has been
problem has been fixed for this version of RegKey.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 76
- A number of minor improvements have been made to the RegKey
manual.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 77
GLOSSARY
-----------------------------------------------------------------------------
API
API is an acronym for "Application Program Interface" or
"Application Programmer Interface". An API is a well-defined set of
related functions or procedures that can be called from an
application program written in a programming language such as C,
C++, Pascal or BASIC. These functions are used to access a specific
feature or set of features from within your program. The RegKey API
consists of five functions (RegKeyNewCodeSet(), RegKeyGenerate (),
RegKeyValidate(), RegKeyFileGenerate() and RegKeyFileValidate())
which you can use to add registration key capabilities to your
programs. Another example of an APIs is the Microsoft Windows API,
which provide Windows programs with access to screen display,
printing and other features which are managed by Windows.
BRAND
As an alternative to using registration keys, each copy of a
particular application can be "branded" with a particular user's
name. In this case, the application's executable file(s) contains
the name of the one user who is licensed to use that copy of the
software, and that name is usually displayed at program startup.
Branding is commonly used in commercial software to discourage
illegal copying of the software, as the guilty user's name will
appear on every illegal copy. This disadvantage of this approach is
that it requires the author or company selling the software to
produce a unique copy of the program for each user.
CODE SET
RegKey uses the term "code set" to refer to a set comprising a
"generation code" and a corresponding "validation code". For each
application (or each version of the application) using RegKey that
requires unique registration keys, the application developer(s)
generate a unique "code set" using the utilities included in the
RegKey package. The secret "generation code" is required to create
the unique registration keys for a particular application. The
"validation code" is used within the application itself to test a
registration key provided by the user.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 78
ENCRYPTION
Encryption is the process of translating information - such as
written text or a computer program - into a form that cannot be
read by unauthorized individuals. Only by knowing the manner in
which some information has been encrypted, can someone decrypt and
make use of that information. It is possible to use an encryption
algorithm to encrypt portions of a program's executable file(s), in
order to make it more difficult for someone to alter the executable
file. This can be of use when using RegKey, in order to increase
the security of the RegKey mechanism.
RegKey does not provide any encryption capabilities itself.
Depending upon where you live and what form of encryption you are
using, there may be legal issues you wish to consider if your are
going to export software using encryption technology to other
countries.
FILE-BASED REGISTRATION KEYS
RegKey supports two types of registration keys - file-base and
user-entered. With file-based registration keys, both the
registration string (e.g. the user's name) and the corresponding
registration key code are stored in a registration key file. When a
user becomes registered, they receive a small registration key file
that is installed in the program's working directory. When a valid
registration key file is present, the program will operate in
registered mode.
GENERATION CODE
RegKey uses the term "generation code" to refer to the numerical
key that is used to generate registration keys for a particular
application using RegKey. For each different generation code,
different registration keys are generated for the same registration
string. Without knowing the generation code used by your
application, it is infeasible for anyone else to generate
registration keys that will work with your application. For this
reason, you should take great care to keep your application's
generation code a secret. You can use the KeyGen utility included
with RegKey to create a new generation code. When a generation code
is created, a corresponding "validation code" is also created. It
is this validation code that is passed to RegKey by your
application when testing the validity of a registration key. It is
not usually important to keep the validation code a secret, as
knowing it only allows someone to determine whether or not a
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 79
particular registration key / registration string combination is
valid for your application.
INFEASIBLE
The term "infeasible" is used in software protection to describe
something that is very difficult - though not impossible - to
achieve. For instance, even if someone were able to test one
million registration keys per second, it would still take many
centuries to discover a RegKey registration key by a trial-and-
error method. Since so much time would be required to discover a
RegKey registration key by this method, it is said to be infeasible
to "guess" a correct registration key.
REGISTERED MODE
Programs that use registration key systems may operate in either
"registered" or "unregistered" mode. In "unregistered" or
"demonstration" mode, the software may have certain features
disabled, may only operate for a limited period of time, or may
display a "please register" message during program operation. When
the user pays for the software, they receive a registration key
corresponding to their name or other personal information. When
this registration key is presented to the application, it will then
operate in "registered" mode, eliminating any "unregistered"
messages and possibly enabling additional features.
REGISTRATION KEY
For each user who pays for your software, you use RegKey to
generate a unique registration key, based on the information of the
registration string (usually the user's name). The resulting
registration key is a 96-bit number that is (in all probability)
unique for each user that registers your application. This
registration key may either be entered into your application by the
user, or may be stored in a "registration key file" that is given
to the user upon registration. Your application can then use RegKey
to determine whether or not the registration key is valid, thus
determining whether or not it should operate in "registered mode".
RegKey represents the registration key as a 20 digit base 32
number. The registration key returned to you when generating
registration keys, and the key presented to RegKey by your
application, is represented as a 20 character string of numerals
and uppercase letters. Hence, AB7EWBR24LZTUFEY2PLF might be a
typical RegKey registration key.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 80
REGISTRATION KEY FILE
When file-based registration keys are used, both the registration
string (usually the user's name) and the registration key code are
stored in a small registration key file. This file usually has a
.KEY filename extension.
REGISTRATION STRING
A unique registration string is associated with each user who
registers your software. This registration string is usually just
the user or organization's name, but it may also include additional
information, such as the registered version or registration expiry
date. In any case, the registration string usually consists of
information that the user knows prior to registering. When the user
pays for your software, you use RegKey to generate a registration
key that corresponds to the registration string. When the
registration string is presented to your application in conjunction
with the registration key, it can use RegKey to test the validity
of the registration string / registration key combination, in order
to determine whether or not to operate in "registered mode".
SHAREWARE
A method of marketing computer software, where the author
encourages the free distribution of the software. This allows
potential users of the software to "test-drive" the application
before buying it. In the shareware approach to software marketing,
the user is usually required to either stop using the software
after a three to four week trial period, or pay to "register" the
software with the author.
SOFTWARE PROTECTION
The term "software protection" is used to describe any mechanism or
scheme that is used to prevent or discourage illegal or
unauthorized use of computer software. Approaches to software
protection include "copy-protection" schemes which attempt to
prevent a duplicate copy of the software from being produced,
"hardware-key" mechanisms which require a particular hardware
device (which is sold with the software) to be present in order to
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 81
use the software, and "registration-key" mechanisms such as is
provided by RegKey.
USER-ENTERED REGISTRATION KEYS
RegKey supports two types of registration keys - file-base and
user-entered. With user-entered registration keys, the user
manually enters registration string (e.g. the user's name) and the
corresponding registration key code into the application or
configuration program when they first register. When a valid
registration key has been entered for the entered registration
string, the program will operate in registered mode.
UNREGISTERED MODE
See "Registered Mode".
VALIDATION CODE
RegKey uses the term "validation code" to refer to the numerical
key that is used to test the validity of a registration key /
registration string combination, during your application's
execution. Your application should pass its unique validation code
to RegKey when it wishes to test a registration key. You can use
the KeyGen utility included with RegKey to create a new validation
code / generation code set for a new application (or version).
Unlike the generation code that should be kept confidential, it is
not usually important to keep the validation code a secret. This is
because knowing the validation code only allows someone to
determine whether or not a particular registration key
/registration string combination is valid for your application.
Knowing the validation code does not enable someone to generate
false registration keys for your application.
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 82
INDEX
-----------------------------------------------------------------------------
- A - - I -
API, 29, 31, 34, 78 Introduction, 3, 23
C/C++, 55
QuickBASIC/Visual Basic, 61 - K -
Turbo Pascal, 69
Applications of Registration Keys, KeyGen Program, 13, 18, 19, 27, 28,
22 29, 30, 31, 32, 37, 41, 51, 52,
Author's address, 71 54, 57, 58, 60, 65, 66, 68, 73,
74, 75, 79, 82
- B -
- O -
Branding Software, 22, 78
Ordering RegKey
- C - Agreement, 17
Filling Order Form, 8
Code Sets, 23, 24, 27, 28, 29, 30, Order Form, 15
37, 38, 51, 57, 65, 78, 82 Overview, 7
Common Problems, 44 Price, 11
CTL3DV2.DLL File, 19, 27, 44, 73, Source Code, 13
74, 75 Terms, 17
- E - - P -
Encryption, 79 Porting RegKey, 13, 70
Evaluation Terms, 5 Principles of RegKey, 23
Expiry Information, 23, 26, 32, 37, Printing Manual, 1
38, 39, 41, 52, 54, 58, 60, 66,
68, 81 - Q -
- F - QuickBASIC, 3, 19, 36, 45, 47, 56,
57, 58, 59, 60, 61, 74
Features of RegKey, 3
File-Base Registration Keys, 79 - R -
File-Based Registration Keys, 25, 81
Files, 73 Registered Mode, 21, 36, 40, 80
Registering RegKey. See Ordering
- G - Registration Key Expiry, 23, 26, 32,
37, 38, 39, 41, 52, 54, 58, 60,
Generating Registration Keys, 31 66, 68, 81
Generation Codes, 4, 23, 29, 30, 31, Registration Keys, 21, 23, 80
32, 33, 41, 42, 44, 51, 52, 54, Registration Strings, 23, 25, 26,
57, 58, 60, 65, 66, 68, 78, 79, 82 31, 32, 33, 34, 35, 36, 37, 38,
Getting Help, 44, 71 39, 42, 52, 53, 54, 55, 58, 59,
Glossary, 78 60, 61, 66, 67, 68, 69, 79, 80,
81, 82
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 83
RegKey Files, 73 - T -
RegKeyFileGenerate() Function, 33,
52, 54, 58, 60, 66, 68, 78 Table Of Contents, 2, 18, 47
RegKeyFileValidate() Function, 34, Troubleshooting, 44
35, 36, 44, 49, 53, 55, 59, 61, Turbo Pascal, 3, 19, 36, 45, 47, 63,
67, 69, 78 64, 65, 66, 67, 68, 69, 74
RegKeyGenerate() Function, 33, 52,
54, 58, 60, 66, 68, 78 - U -
RegKeyNewCodeSet() Function, 29, 51,
52, 53, 54, 55, 57, 58, 59, 60, Unregistered Mode, 21, 36, 40, 82
61, 65, 66, 67, 68, 69, 78 User-Entered Registration Keys, 25,
RegKeyValidate() Function, 34, 35, 82
36, 42, 44, 49, 53, 55, 59, 61,
67, 69, 78 - V -
- S - Validation Codes, 4, 23, 24, 27, 28,
29, 30, 34, 35, 37, 42, 44, 51,
Security, 4, 6, 12, 13, 21, 27, 40, 53, 55, 57, 59, 61, 65, 67, 69,
79 78, 79, 82
Shareware, 21, 22, 81 Visual Basic, 3, 19, 36, 42, 46, 47,
Software Protection, 43, 81 56, 57, 58, 59, 60, 61, 62, 75
-----------------------------------------------------------------------------
REGISTRATION KEY SYSTEM 3.10 MANUAL END OF PAGE 84