Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not an Issue: About Product Factoring #14

Open
iblowmymind opened this issue Apr 20, 2021 · 1 comment
Open

Not an Issue: About Product Factoring #14

iblowmymind opened this issue Apr 20, 2021 · 1 comment

Comments

@iblowmymind
Copy link

iblowmymind commented Apr 20, 2021

Hello,

I'm bringing up issue #1 again since there are some bcd and mesa files related to product factoring in the 6085 VP Programming Package for XDE 6.0 (located in bitsavers's bits/Xerox/6085/6085_XDE_6.0_VP_Devel.zip). Using dmk2raw and the extractxeroxfloppy tool I was able to recover, like, 1000+ BCD, mesa source codes and symbol files. Among those are a lot of bcd files (and even some sources/interfaces) related to Product Factoring.

-- File: PFSupport.mesa - last edit:
-- Breisacher.ES       29-Apr-85 12:58:41
-- Curbow.ES       17-Feb-85 14:21:55

-- Copyright (C) 1984, 1985 by Xerox Corporation. All rights reserved.

<<Overview:
  Interface to be used by some user interface to get, set and 
  list Software Options.>>


DIRECTORY
  NSFile USING [Handle, Session],
  ProductFactoring,
  System,
  Volume,
  XFormat,
  XString;

PFSupport: DEFINITIONS =
  BEGIN

  --TYPES

  ErrorType: TYPE = {
    passwordExpired,  -- That password cannot be used
    incorrectPasswordFormat,  -- Invalid number or set of chars in password
    passwordInvalid,  -- The password is not valid for this machine 
    productDead,  -- This product is not currently valid
    problemAccessPFInfo,  -- Unable to access the PF file (Probably a software error)
    superPassword  -- This password is a Super Password.
    };

  PackedOptions: TYPE = RECORD [
    product: ProductFactoring.Product,
    options: PACKED ARRAY ProductFactoring.ProductOption OF BOOLEAN _ ALL[FALSE]];

  SSNProc: TYPE = PROC [
    ssnString: XString.Reader, configTime: System.GreenwichMeanTime];
  << This procedure will be called with a SSN string to be printed. >>

  PasswordProc: TYPE = PROC [newPassword: XString.Reader];
  << This procedure will be called with a Password to be printed. >>

  ProductDescProc: TYPE = PROC [
    desc: XString.Reader, product: ProductFactoring.Product,
    changeTime: System.GreenwichMeanTime] RETURNS [stop: BOOLEAN _ FALSE];
  << This procedure will be called with the information about one particular product. If this is the result of EnumerateProducts, rather than GetProductDescription, then when stop is set to TRUE the enumeration will stop. >>

  ProductOptionDescProc: TYPE = PROC [desc: OptionDesc]
    RETURNS [stop: BOOLEAN _ FALSE];
  << This procedure will be called with the information about one particular product. If this is the result of EnumerateProductOptions, rather than GetProductOptionDescription, then when stop is set to TRUE the enumeration will stop. >>

  OptionDesc: TYPE = RECORD [
    optionName: XString.ReaderBody _ XString.nullReaderBody,  -- name of the option
    productOption: ProductFactoring.ProductOption,  -- code unique within this product.
    prerequisite: ProductFactoring.Prerequisite  -- Any other Product option that this depends upon.
    ];

  --ERRORS

  SupportError: ERROR [type: ErrorType];


  --PROCEDURES to manipulate Options for a specified Product.

  <<BACKGROUND:
   Associated with each Product is a set of options. Each option is something considered valuable enough to warrant control of its use by the vendor. Therefore, the Software options (which are a representation of valuable property) are difficult to change so as to prevent unauthorized changes. The vehicle used to change the options is a password. Each password is valid on only one machine for one use. It consists of the new set of options for a particular product, an expiration date, and a random seal to control use. The random seal is stored in a file, and changed after each new set of options is "Locked" onto the disk. This random seal is returned to the user as part of the Software Serial Number which is given to the Xerox authority which gives out passwords. The Software Serial Number also contains the curent set of options for the product for which new options are desired. It also contains a constant seal.>>

  Start: PROCEDURE [
    volume: Volume.ID, directory: NSFile.Handle, session: NSFile.Session];
  <<Guarantees that the primary PF file (in the root directory of volume) and the secondary PF file (in directory) contain the latest PF information and caches the information for subsequent calls to Enabled.
  If this machine has not yet been ProductFactored it will create an file with all options reset.
  If the file is from an earlier version, then it will be converted forward . >>

  GetSSN: PROCEDURE [
    product: ProductFactoring.Product, volume: Volume.ID, proc: SSNProc];
  << Generate the SSN for the specified product and pass it to the specified proc. Volume specifies the location of the Software Options file. 
  May raise SupportError[problemAccessPFInfo]>>

  DecodePassword: PROCEDURE [password: XString.Reader, volume: Volume.ID]
    RETURNS [packedOptions: PackedOptions];
  << Decode the password and return the decoded information and when it expires. These options will NOT be written onto the disk. The Reader will not be freed.
  May raise SupportError[problemAccessPFInfo]
  May raise SupportError[passwordInvalid]
  May raise SupportError[incorrectPasswordFormat]
  May raise SupportError[passwordExpired]
  May raise SupportError[superPassword] >>

  LockOptions: PROCEDURE [password: XString.Reader, volume: Volume.ID];
  << Decode the password and write the new options onto the disk. Note: The SSN will change at the completion of this operation. Volume specifies location of the system volume, i.e. where to store the Software Options. The Reader will not be freed.
  May raise any error that DecodePassword raises.  >>

  SelectOptions: PROC [
    password: XString.Reader, packedOptions: PackedOptions, volume: Volume.ID];
  << If the password is a valid SuperPassword then the packed options will be stored into the Software Options file on the specified volume. 
  May raise any error that DecodePassword raises except SupportError[superPassword]. 
  Raises SupportError[passwordInvalid] if not a valid SuperPassword >>

  GetLockedOptions: PROC [product: ProductFactoring.Product, volume: Volume.ID]
    RETURNS [packedOptions: PackedOptions];
  << Returns the options stored on the disk associated with the specified product.
  May raise SupportError[problemAccessPFInfo] >>



  -- PROCEDURES to manipulate Products as a group.
  -- The ERROR raised by these procs is from ProductFactoring rather than PFSupport.


  GetProductDescription: PROC [
    product: ProductFactoring.Product, proc: ProductDescProc];
  << This procedure will call the specified proc with info about the specified product.
  Raises Error[missingProduct] if the Product has not yet been defined.   
 Raises Error[illegalProduct] if the value of product is out of range.>>

  EnumerateProducts: PROC [proc: ProductDescProc];
  << This procedure will call the specified proc with info about the every defined product.>>

  GetProductOptionDescription: PROC [
    product: ProductFactoring.Product,
    productOption: ProductFactoring.ProductOption, proc: ProductOptionDescProc];
  << Returns info about one specific option of the specified product.  
 Raises Error[illegalProduct] if the value of product is out of range.
 Raises Error[illegalOption] if the value of productOption is out of range.
 Raises Error[missingProduct] if the Product has not yet been defined.
 Raises Error[missingOption] if the Option has not yet been defined.>>

  EnumerateProductOptions: PROC [
    product: ProductFactoring.Product, proc: ProductOptionDescProc];
  << This procedure will call the specified proc with info about the every defined option of the specified product. >>

  DeleteProduct: PROC [product: ProductFactoring.Product];
  << The Product description and all associated ProductOption descriptions for the specified Product will be deleted. If the specified Product has not yet been described, then nothing will happen. After the last Product description has been deleted, the zone used internally will be deleted. 
 Raises Error[illegalProduct] if the value of product is out of range.>>

  DeleteProductOption: PROC [
    product: ProductFactoring.Product,
    productOption: ProductFactoring.ProductOption];
  << The specified ProductOption description for the specified Product will be deleted. If it has not yet been defined, then nothing will happen. 
 Raises Error[illegalOption] if the value of productOption is out of range.>>
 
 -- Support Routines
 DecodeSupportError: PROC [
    type: PFSupport.ErrorType, handle: XFormat.Handle];
    << Appends a string to the handle appropriate for the error type. >>
    
    DecodePFError: PROC [
      type: ProductFactoring.ErrorType, handle: XFormat.Handle];
      << Appends a string to the handle appropriate for the error type. >>


  END.  --of PFSupport.mesa 

LOG [Time - Person - Action]
28-Nov-84 15:32:17 - Curbow - Created for BWS 4.0

This is one of the files, which has some comments on how factoring works. I hope this can shed some light on how we can make a "password tool".

From this, I can understand that the software passwords in the README.md file in this repo are probably super passwords since they bring up an Analyst / Customer selection with a slightly different UI than documented in the Documentation Library PDFs for installation and activation. I can also see that there is a primary (public) and secondary (private) PF file in an installation, but they aren't visible (even with the System Folder tool in the VP 6.0 Devel Tools floppy). Since there is a similar tool for extracting files out of Xerox-formatted floppies, would it be possible to extract files off of a Darkstar hard disk image? If it would, then we could extract the PF files and inspect them.

So, to conclude, the VP libraries/interfaces and debugging symbols are available for XDE6 / VP2 on this link. It's for the 6085 however it can be ran with devhawala's dwarf emulator, but the only thing missing is XDE 6.0 itself and the Mesa Development Tools, which both of them, unfortunately, seem to be lost right now.
Thanks!
-blw

@iblowmymind
Copy link
Author

iblowmymind commented May 2, 2021

Oh, and also, a quick question out of curiosity:
Where did you find the passwords in the README.md file?
Also I've read from a post in comp.sys.xerox from 1995 that there was an internal Xerox hack that would allow you to bypass factoring entirely and activate everything. This is the link to the post.
-blw

@iblowmymind iblowmymind changed the title About Product Factoring Not an Issue: About Product Factoring May 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant