New Validation System Explained

On version 23.0.0, we introduced a registration validation system to improve the already existing registration system. Until version 24.0.0 is released, it will run in the background of EmEditor as a test of the system. On version 24.0.0, the validation system may output notifications when invalid registrations are detected.

This blog serves to be transparent about our motivations and to document how the validation system works. If we update the validation system in the future, we will also update this page.

Motivation

Currently, there is no way for us to detect a user who is sharing their license with ten other people, or those who are using their license on more devices than allowed by the EULA (end-user license agreement). We would like customers to purchase enough licenses to follow the terms of the license. This would ensure fairness among customers who have purchased multiple licenses.

Requirements

This section lists the requirements we had for the validation system.

Functional

  • The validation system should loosely enforce the device limit clause of the license. It should not sacrifice customer satisfaction, so we should not make this limit a surprise.
  • EmEditor can be used offline. Validation will not fail if your device is offline.
  • Privacy rights of users should be maintained. The collection of personal information will be opt-in.
  • It should fit into the existing registration system and not make it a new way to register. Current users should be able to register without having to learn new steps.
    • Uninstalling the app should unregister the device.
    • Users will not need to manually register again when updating to version 24.
  • Users can log in to the Emurasoft Customer Center to view devices so that devices can be unregistered outside of the app.
  • Customers who have purchased from non-2Checkout resellers will have to register the product and create a customer center account. This is because there will be no way for them to see their devices online without an account.
  • The system should be tested in the background in version 23. It should be fully in effect from version 24.

Technical

  • The system should be simple so that it is easier to maintain.
  • A machine can be identified with a machine ID.
    • We determined that the registry value
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid
      is a suitable ID.
    • EmEditor Portable can be installed on a USB, with its settings stored in the USB. The USB can be used on many machines, and the validation system would detect different machine IDs. Therefore if the app detects that it is a portable version running on a USB, registration does not occur.
  • EmEditor can be installed per-user on a multi-user machine. We must combine all EmEditor installations on the same machine as one unit to the device count.
  • There should be a way to override the limit for a given registration key, just in case.
  • A signed token containing the device info should be stored on the user’s device. This associates the current device with the device record stored in the database.
  • The system should be able to integrate a floating license system if we decide to in the future.

Output

  • You can view a list of all devices in the Registered Devices page of customer center.
  • If the device limit is reached, a notification will appear. The user can still use the app even if the device limit is exceeded.

  • If the user bought the app from a non-2Checkout reseller and has not registered the product, a notification will ask the user to register the product.

Device table

The device table is stored in our database and records all devices that were registered. Note that a History record is associated with a purchase and it is where a registration key is stored. A Device record is defined in Go as follows.

type Device struct {
    DeviceID         uuid.UUID
    UserID           int
    HistoryID        int
    MachineID        uuid.UUID
    RegistrationDate time.Time
    ValidationDate   time.Time
    InstallationType InstallationType
    Label            string
    Unregistered     bool
}

The fields are explained in the documentation for Registered Devices.

Privacy measures for label

The Label field may contain personal information. The Label device field in the Register Product dialog box defaults to {computer name} {user name}. The personal information inside the label field is not necessary for the basic functionality of the app. Therefore, we made the label field opt-in to stick to our policy of privacy by default.

Local Device token

A LocalDevice token is stored locally on the user’s device in the form of a JWT (JSON Web Token). It associates the current device with the database Device record. It also allows EmEditor to do some validation even if it is offline. The token payload is defined as follows.

type LocalDevice struct {
    DeviceID  uuid.UUID
    MachineID uuid.UUID
}

Device count

This section describes how we determine how many devices you can register. This is subject to change if we change the terms of the EULA.

To calculate the number of units towards the device limit for a specific registration key, we use the following MySQL query.

SELECT count(DISTINCT MachineID) as deviceCount
FROM devices
WHERE HistoryID=? AND Unregistered=FALSE

For a given history ID, we first get all devices that are still registered. Then we count the number of unique machines. If there are multiple devices with the same MachineID, they are likely multiple per-user installations on the same machine.

The EULA allows the licensee to install EmEditor to up to two devices per license. If EmEditor is for personal use and not installed on corporate computers, the licensee can install EmEditor to five devices per license.

Registration process

There are three scenarios where registration may happen, but the first is the most likely case.

  • Most users will register through the Register Product dialog box.
  • If you updated from version 22 to 23 and above, then EmEditor would have stored your registration key but a device record would not exist. In this case, EmEditor will automatically create the device record corresponding to the registration key without any input from the user.
  • If you unregistered a device, then opened EmEditor on that device, the device will be registered automatically.

Below is a summary of what happens after the user clicks OK in the Register Product dialog box. “Client” refers to the local EmEditor app. “Server” is our backend server and database.

  1. If the app is a portable version and is running on a removable drive, registration is skipped.
  2. If a device token already exists, the client sends an unregister request to the server.
  3. The client sends a registration request to the server, which includes the registration key, machine ID, label, and installation type.
  4. The server queries deviceCount (defined in previous section) to determine if the registration key can be used to register the device. On success, a Device record is created.
  5. The client receives the device ID. Using the device ID, the client requests a local device token and writes it to local storage.

Validation process

Validation occurs in registration and every time the app is opened.

  1. If the app is a portable version and is running on a removable drive, validation is skipped.
  2. If the local device token does not exist, the registration process occurs first.
  3. The token integrity is checked. The actual machine ID is compared with the stored machine ID. The result is ignored if the app is running on a removable drive.
  4. A random number generator determines if the process should stop here. This is to reduce the load of requests to our server.
  5. The validation function sleeps the thread for a certain duration. This is again to reduce the request load, as we assume that macros and other automated use cases that rapidly start and close the app would only run it for a short duration.
  6. The client requests the Device data for the stored device ID.
  7. If Device.Unregistered == true, the client attempts to register the device.

Devices will be unregistered when version 24 is released

On the day that version 24 is released, all devices will be unregistered. In version 23, uninstallation did not unregister devices, so there are many devices that should be unregistered. After we unregister all devices, the devices that are in use will automatically register again.

Support

If you have any questions or feedback about the validation system, feel free to send us a message.

License price update and ending sales of lifetime licenses

Lifetime License

Unlike “perpetual” licenses sold by other companies, our lifetime licenses include the right to receive future updates indefinitely. It is difficult to predict the future, but we would like to develop and support EmEditor for a long time. Our family and employees depend on the sales of EmEditor, which need to last for future generations. Therefore, we will end sales of lifetime licenses on August 28th, 2024. We will not sell lifetime licenses after August 28th, 2024. If you plan to use EmEditor Professional for a long time, you could save on future costs by purchasing lifetime licenses now. We will also raise the price of a lifetime license on August 30th, 2023 from the current $260 to $380 for a single license. The volume lifetime license prices will also be adjusted accordingly.

Annual Subscription

We will raise the price after the first year from the current 50% of the first year price to 75% on August 28th, 2024. If you have subscription licenses, you can renew your subscription at the current price before August 28th, 2024 without changing the expiration date. If you have subscribed to licenses through our website, you may purchase a single-year renewal if your previous purchase was made more than 30 days ago. If you would like to purchase multi-year renewals, please contact us and we will send you a link to do so. If you purchased a subscription through a reseller, please contact your reseller to purchase multi-year renewals.

Please also see How to calculate the number of licenses.

We will continue development of EmEditor and providing support to our customers.

Thank you for using EmEditor!

License price update

We have not changed the price of an annual subscription since we started annual subscription licensing. However, our expense cost continues to grow, and we need to adjust the price so that we can continue development and providing services to our customers. Therefore, we are going to increase the price of licenses. Taking effect on August 1, 2022, we are changing the first year price of an annual subscription license from US$39.99 to US$40.00, and a lifetime license from US$252 to US$260. The volume license prices will also be adjusted accordingly.

Please also see How to calculate the number of licenses.

We will continue development of EmEditor and providing support to our customers.

Thank you for using EmEditor!

Lifetime license price update

We have not changed the price of a lifetime license since 2019. However, our expense cost continues to grow, and we need to adjust the price so that we can continue development and providing services to our customers. Therefore, we are going to increase the price of a lifetime license. Taking effect on April 1, 2022, we are changing the price of a lifetime license from US$179.99 to US$252. The volume license prices of lifetime licenses will also be adjusted accordingly. However, annual subscriptions will not be affected.

We have also clarified the number of licenses. Please see How to calculate the number of licenses.

We will continue development of EmEditor and providing support to our customers.

Thank you for using EmEditor!

New page – How to Increase Virtual Memory

If an error message similar to “The paging file is too small for this operation to complete” or “Your computer is low on memory” appears while opening a very large file, you will need to increase the physical or virtual memory. This new page explains how to increase virtual memory on your system.

How to Increase Virtual Memory

EmEditor Logo

FAQ – The digital signature of a program files could not be verified

EmEditor checks digital signature of EmEditor executables and DLL files before opening to mitigate for DLL hijacking vulnerability since Version 17.5.

If you open EmEditor on a PC where the Internet connection is unavailable, you might run into an issue such as:

  • A warning dialog box “The digital signature of a program file could not be verified.” appears when you try to launch EmEditor.
  • The digital signature of EmEditor files (such as emeditor.exe and .msi installers) cannot be verified.
  • EmEditor launch becomes slow.

In these cases, please refer to FAQ “Read this first if you are having trouble installing EmEditor” – #20.

Lifetime license price update

Since the introduction of lifetime licenses in 2012, we have not changed the price of a lifetime license. However, our expense cost continues to grow, and we need to adjust the price so that we can continue development and providing services to our customers. Therefore, we are going to increase the price of a lifetime license. Taking effect on April 1, 2019, we are changing the price of a lifetime license from US$149.99 to US$179.99. The volume license prices of lifetime licenses will also be changed. However, annual subscriptions will not be affected.

We will continue development of EmEditor and providing support to our customers.

Thank you for using EmEditor!

Our Partner Avangate Rebranded as 2Checkout

Our online payment partner Avangate will be rebranded as 2Checkout on June 19th, 2018. If you have received emails from Avangate regarding your subscriptions, you will receive them from 2Checkout (@2checkout.com) from now on. Please whitelist emails from @2checkout.com as well as @emurasoft.com in order to receive important emails in the future. Your subscription contracts will remain as they are now. Your former Avangate myAccount page will be updated to https://www.2co.com/, but our Emurasoft Customer Center will remain the same as https://support.emeditor.com/. We thank you in advance for your time.

A new team member at Emurasoft

I am very excited to announce that my son, Makoto Emura, has joined our team. He has already helped produce our recent new features of EmEditor, including our new Character Count plug-in, which he has built by himself. His detail-minded professionalism lends greatly to making excellent test programs. He is passionate for protecting our customer data as well as our code base. His creativity and uniqueness will lead innovation in our business for the future. I believe he is a person of integrity, not just from a father’s standpoint, but from a co-worker’s perspective. I believe he possesses all good business ethics for the future when he succeeds our business.

He lived in the United States since Kindergarten, and he studies Computer Science at Bellevue College, in Washington. He is a dual citizen of Japan and the United States. Please welcome Makoto to our community, and feel free to give him any advice you might have regarding our direction in the future.

Yutaka Emura

EmEditor Logo

Emurasoft Privacy Policy Updates

All Emurasoft, Inc. products and services have always been committed to protecting the privacy and data of our clients. Recently the European Union created the General Data Protection Regulation (GDPR) which goes into full effect on May 25, 2018. We have updated our Privacy Policy to to clarify the following:

  • The Information We Collect
  • How You Can Access, Correct, or Update Your Information

Please read the policy to understand these changes. Your use of all Emurasoft, Inc. products and services is subject to the revised policy.

Thank you for using EmEditor!